//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]); } ; }