lightoj1038

时间:2024-09-21 19:37:14
 //Accepted    2860 KB    16 ms
 //概率
 //对于n,假设n变成1的期望步数为p(n)
 //则p(n)=1/t*sum((1+p(d))) d|n
 //解得:p(n)=1/(t-1)*(t+sum(p(d))) d|n d!=n;
 //下面我们可以改造筛素数的方法,对于每个d,看他整除那些数
 #include <cstdio>
 #include <cstring>
 #include <iostream>
 #include <queue>
 #include <cmath>
 #include <algorithm>
 using namespace std;
 /**
   * This is a documentation comment block
   * 如果有一天你坚持不下去了,就想想你为什么走到这儿!
   * @authr songt
   */
 ;
 double f[imax_n];
 int t[imax_n];
 void pre()
 {
     ;i<imax_n;i++)
     {
         f[i]=;
         t[i]=;
     }
     f[]=;
     ;i<imax_n-;i++)
     {
         f[i]=(f[i]+)/t[i];
         *i;j<imax_n-;j+=i)
         {
             f[j]+=+f[i];
             t[j]++;
         }
     }
 }
 int n;
 int main()
 {
     pre();
     int T;
     ;
     scanf("%d",&T);
     while (T--)
     {
         scanf("%d",&n);
         printf("Case %d: %.6lf\n",++t,f[n]);
     }
     ;
 }