您的位置:首页 > 大数据 > 人工智能

LightOJ 1038 Race to 1 Again【概率DP】

2016-10-03 16:53 579 查看
Race to 1 Again
Crawling in process...
Crawling failed
Time Limit:2000MS    
Memory Limit:32768KB     64bit IO Format:%lld & %llu

Submit
Status
Practice
LightOJ 1038


uDebug

Appoint description:
System Crawler (Sep 30, 2016 11:41:55 AM)

Description

Input

Output

Sample Input

Sample Output

Hint

Description

Rimi learned a new thing about integers, which is - any positive integer greater than
1 can be divided by its divisors. So, he is now playing with this property. He selects a number
N. And he calls this D.

In each turn he randomly chooses a divisor of D (1 to D). Then he divides
D by the number to obtain new D. He repeats this procedure until
D becomes 1. What is the expected number of moves required for
N to become 1.

Input

Input starts with an integer T (≤ 10000), denoting the number of test cases.

Each case begins with an integer N (1 ≤ N ≤ 105).

Output

For each case of input you have to print the case number and the expected value. Errors less than
10-6 will be ignored.

Sample Input

3

1

2

50

Sample Output

Case 1: 0

Case 2: 2.00

Case 3: 3.0333333333

/*
题意:求将一个数变成1,每次可以除去它的任意一个因子,问你次数的期望为多少
类型:概率DP
分析:设dp[i]表示i变成1的次数期望
当N=2时,有两个因子:1,2.所以dp[2]=dp[1]/2+dp[2]/2+1; 可以得到dp[2]=2;
当N=8时,有4个因子1,2,4,8.所以dp[8]=dp[1]/4+dp[2]/4+dp[4]/4+dp[8]/4+1;可以得到dp[8];
以此类推 dp[i]=dp[a[1]]/cnt+dp[a[2]]/cnt+...+dp[a[cnt]]/cnt+1;
其中cnt为i的因子个数,a数组为i的因子集合
整理可得dp[i]=(dp[a[1]]+dp[a[2]]+...+dp[a[cnt-1]]+cnt)/(cnt-1);
*/
#include <cstring>
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <stack>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 100005;
double dp[maxn];

int main()
{
dp[1] = 0;
for(int i=2;i<maxn;i++){
double sum=0;
int cnt=0;
for(int j=1;j*j<=i;j++){
if(i%j==0){
cnt++;
sum+=dp[j];
if(j*j!=i){
cnt++;
sum+=dp[i/j];
}
}
}
sum+=cnt;
dp[i]=sum/(cnt-1);
}
int t,n;
scanf("%d",&t);
for(int Cas=1;Cas<=t;Cas++){
scanf("%d",&n);
printf("Case %d: %.6f\n",Cas,dp
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: