动态规划求数学期望
题目的意思是说任何一个大于1的整数,, 经过若干次除以自己的因子之后可以变为1, 求该变换字数的数学期望值。
例如 16 数以自己的因子之后可以变为1 2 4 8 16;有数学期望的计算公式可得该数学期望为1 2 4 8 16的数学期望之和
由此可得递推公式
#include <cstdio>
#include <cmath>
double dp[100000+10];
int main()
{
int i, j, cnt;
double sum;
dp[1] = 0;
for(i=2; i<=100000; i++)
{
sum = 0;
cnt = 0;
for(j=1; j<=sqrt(1.0*i); j++)
if(i % j == 0)
{
sum += dp[j];
cnt++;
if(j!=1 && i/j != j)
{
sum += dp[i/j];
cnt++;
}
}
cnt++;
sum += cnt;
dp[i] = sum / (cnt - 1);
}
int t, n, ca;
ca = 1;
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
printf("Case %d: %.20f\n", ca++, dp[n]);
}
return 0;
}