Input
Input starts with an integer T (≤ 10000), denoting the number of test cases.
Each case contains an integer N (1 ≤ N ≤ 1012).
Output
For each case, print the case number and the number of possible bases where N contains at least one trailing zero.
Sample Input
3
9
5
2
Sample Output
Case 1: 2
Case 2: 1
Case 3: 1
——————————————————————
思路:
欧拉函数的变形.任何数x=a1^b1*a2^b2*…(b1 b2…是质数)
不含1的因子数为(b1+1)*(b2+1)*….-1
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL N = 1e6;
bool p[N+5];
LL prime[N+5];
LL k=0;
void init()
{
LL i,j;
for(i=2; i<=N; i++)
{
if(p[i]==0)
{
prime[++k]=i;
for(j=i*i; j<=N; j+=i)
p[j]=1;
}
}
}
int main()
{
init();
LL t,i,j;
cin>>t;
for(j=1; j<=t; j++)
{
LL n,ans=1;
scanf("%lld",&n);
for(i=1; i<=k&&prime[i]*prime[i]<=n; i++)
{
if(n%prime[i]==0)
{
LL num=0;
while(n%prime[i]==0)
{
n=n/prime[i];
num++;
}
ans=ans*(num+1);
}
}
if(n!=1) ans*=2;//n不是1就一定是质数,指数为1
printf("Case %lld: %lld\n",j,ans-1);
}
return 0;
}