题意:一个整数n每次除以他的因子求除以到1时的期望次数。
t=10000,100000>=n>=1肯定要打表的。
dp【50】=(dp【1】+dp【2】+dp【5】+dp【10】+dp【25】+dp【50】)/6+1。1是贡献的次数1。
按这个方程打表即可。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
double dp[100006];int w[10000];
int main()
{
dp[1]=0;
for(int i=2;i<=100000;i++)
{
double w=0,e=0;
for(int j=1;j*j<=i;j++)
{
if(i%j!=0)
continue;
else
{
if(j*j!=i)
{
e+=2;w+=dp[j]+dp[i/j];
}
else
{
e++;w+=dp[j];
}
}
}
dp[i]=(w+e)/(e-1);
}
int t;
cin>>t;int o=0;
while(t--)
{
int n;
cin>>n;
printf("Case %d: ",++o);
printf("%lf\n",dp[n]);
}
return 0;
}