Light oj 1038 Race to 1 Again (probability dp)
1038-Race to 1 Again
|
PDF (English) |
Statistics |
Forum |
Time Limit: 2 second (s) |
Memory Limit: 32 MB |
Rimi learned a new thing about integers, which is-any positive integer greater1Can be divided by its divisors. So, he is now playing with this property. He selects a numberN. And he callthisD.
In each turn he randomly chooses a divisorD (1 to D). Then he dividesDBy the number to obtain newD. He repeats this procedureDBecomes1. What is the expected number of moves requiredNTo become1.
Input
Input starts with an integerT (≤ 10000), Denoting the number of test cases.
Each case begins with an integerN (1 ≤ N ≤ 105).
Output
For each case of input you have to print the case number and the expected value. Errors less10-6Will be ignored.
Sample Input |
Output for Sample Input |
3 1 2 50 |
Case 1: 0 Case 2: 2.00 Case 3: 3.0333333333 |
Problem setter: JANE ALAM JAN
Set x to n factors, dp [x] = (dp [I] + dp [j] + .... + dp [k]) * (1/n) + dp [n] * 1/n + 1; (I, j, k indicates the factor of x)
Change to get the dp [x] expression,
#include
#include
#include
#include#include
#include
#include
#include
#include
#include
#define L(x) (x<<1)#define R(x) (x<<1|1)#define MID(x,y) ((x+y)>>1)#define eps 1e-8//typedef __int64 ll;#define fre(i,a,b) for(i = a; i
= a;i--)#define mem(t, v) memset ((t) , v, sizeof(t))#define ssf(n) scanf("%s", n)#define sf(n) scanf("%d", &n)#define sff(a,b) scanf("%d %d", &a, &b)#define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)#define pf printf#define bug pf("Hi\n")using namespace std;#define INF 0x3f3f3f3f#define N 100005double dp[N];int n;void inint(){int i,j,cnt;double temp;dp[1]=0;mem(dp,0);fre(i,2,N) { cnt=0; temp=0; for(j=1;j*j<=i;j++)if(i%j==0) { cnt++; temp+=dp[j]; if(j*j!=i) { temp+=dp[i/j]; cnt++; } } dp[i]=(temp+cnt)/(cnt-1); }}int main(){int i,j,t,ca=0;sf(t);inint();while(t--){sf(n);pf("Case %d: %.6lf\n",++ca,dp[n]);} return 0;}