#include<stdio.h>
#include<algorithm>
using namespace std;
const long long N=1e6+10;
typedef long long ll;
ll book[2*N],b[2*N],k=0;
void sushai()
{
ll i,j;
for(i=2; i<=N; i++)
{
if(!book[i])
{
// printf("%d %d\n",k,i);
b[k++]=i;
for(j=2; j*i<=N; j++)
{
book[i*j]=1;
}
}
}
}
ll getsum(ll m)
{
ll i,sum,h=1;
for(i=0; b[i]*b[i]<=m&&i<k; i++)
{
if(m%b[i]==0)
{
sum=0;
while(m%b[i]==0)
{
m=m/b[i];
sum++;
}
h=h*(sum+1);
}
}
if(m<=1)
h=h/2;//如果小于1 说明这个数已经分解到头了 无法再分解为一个质数了
return h;//如果当前这个数不小于1 说明m 还有一个约数 是当前这个数 我们应该再将 h*2 但是题目让求的是约数的对数 所以直接省去了
}
int main()
{
int i,j=1,m,n,t;
scanf("%d",&t);
sushai();
while(t--)
{
scanf("%d%d",&n,&m);
if(n<m*m)
{
printf("Case %d: 0\n",j++);
}
else
{
ll sum=getsum(n);
for(i=1;i<m;i++)
{
if(n%i==0)
sum--;
}
printf("Case %d: %lld\n",j++,sum);
}
}
return 0;
}
Aladdin and the Flying Carpet(质因数分解)
最新推荐文章于 2024-10-02 22:45:05 发布