P = p1^n1*p2^n2*......*pn^nn
数P的因子的个数 = (n1+1)*(n2+1)*.....*(nn+1)
p1,p2,p3,....pn为P的质因数
首先求出1000000以内的素数,再计算每个质因数的个数
#include <stdio.h>
#include <math.h>
long long prime[1000001];
long long trueprime[1000001];
int count;
void getprime()
{
int i,j;
count = 0;
for (i = 2;i<1000001;i++)
{
if (prime[i]==0)
{
if(i<=1000)
{
for (j = i*i;j<1000001;j+=i)
{
prime[j] = 1;
}
}
trueprime[count++] = i;
}
}
}
int main()
{
getprime();
int n,i;
long long num,p,j,q,s;
scanf("%d",&n);
for (i = 1;i<=n;i++)
{
p = 1;
scanf("%lld",&num);
for (j = 0;j<count&&trueprime[j]*trueprime[j]<=num;j++)
{
q = 0;
while(num%trueprime[j]==0)
{
q++;
num /= trueprime[j];
}
p*=(q+1);
}
if (num>1)
{
p*=2;
}
printf("Case %d: %lld\n",i,p-1);
}
return 0;
}