任何一个数都可已被分解为其质因数的平方
例如:18=2×3的平方
其因子个数为(1+1)*(2+1)=6
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=1000005;
long long f[maxn],k,prime[maxn];
void su()
{
memset(f,0,sizeof(f));
f[1]=1;
for(int i=2; i<=maxn; i++)
{
if(!f[i])
{
prime[k++]=i;
for(int j=i*2; j<=maxn; j+=i)
f[j]=1;
}
}
}
int main()
{
int t;
ll u=1;
k=0;
su();
scanf("%d",&t);
while(t--)
{
ll n,m,sum=1,ans=0,i;
scanf("%lld%lld",&n,&m);
if(m*m>n)
{
printf("Case %d: 0\n",u++);
continue;
}
ll s=n;
for(i=0; i<k&&prime[i]*prime[i]<=s;i++)
{
if(s%prime[i]==0)
{
ans=0;
while(s%prime[i]==0)
{
ans++;
s/=prime[i];
}
sum*=(ans+1);
}
}
if(s<=1)
sum/=2;
for(int i=1; i<m; i++)
if(n%i==0)
sum--;
printf("Case %lld: %lld\n",u++,sum);
}
return 0;
}