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~1e5的结果
//对于一个数n,如果因子个数为 cnt,分别为 a1,a2,a3...ai-1,ai;
//则有 1/cnt*(1 + num[ n / a1]) + 1/cnt*(1+num[n/a2]) +....
//化简一下,就可得结果
//注意平方数
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<algorithm>
#define ll long long
#define inf 0x3f3f3f3f
#define maxn 100010
using namespace std;
double num[maxn];
int main()
{
int t,n;
num[1] = 0;
for(int i = 2; i <= 100010;i++)
{
int tmp = sqrt(i);
int cnt = 0;
double sum = 0;
for(int j = 1; j <= tmp; j ++)
{
if(i % j == 0)
{
if( j * j != i)
{
cnt += 2;
sum += num[j] + num[i/j];
}
else
{
cnt ++;
sum += num[j];
}
}
}
sum += cnt;
num[i] = sum*1.0 / (cnt - 1);
}
scanf("%d",&t);
for(int k=1; k <= t; k++)
{
int tmp;
scanf("%d",&tmp);
printf("Case %d: %lf\n",k,num[tmp]);
}
return 0;
}