#include<cstdio>
typedef long long ll;
const int N=1e6+1e4;
int prime[N],p;
bool iscomp[N];
void primetable()//线性筛
{
for(int i=2;i<=N;i++)
{
if(iscomp[i]==false)prime[p++]=i;
for(int j=0;j<p&&i*prime[j]<=N;j++)
{
iscomp[i*prime[j]]=true;
if(i%prime[j]==0)break;
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
primetable();//构建素数表
int t,ca=0,i;
ll n;
scanf("%d",&t);
while(t--)
{
scanf("%lld",&n);
ll ans=1;
for(i=0;i<p&&prime[i]*prime[i]<=n;i++)
{
if(n%prime[i]==0)
{
int ccnt=0;
while(n%prime[i]==0)
{
ccnt++;//记录质因子数
n/=prime[i];
}
ans=ans*(ccnt+1);//更新答案
}
}
if(n>1)
ans*=2;
printf("Case %d: ",++ca);
printf("%lld\n",ans-1);
}
return 0;
}
【题解】LightOJ1028 约数个数 线性筛
最新推荐文章于 2022-10-30 16:57:27 发布