题意:对于数据范围的n,写一个等效程序。
分析
其实就是关注构成lcm的条件,转化为质因数分解关于指数的计数。
上代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
ll t,n,ans,id,tot;
ll p[1000010];
bool v[10000100];
void pre()
{
memset(v,0,sizeof(v));
v[0]=v[1]=1;
for(int i=2;i<=10000000;i++)
{
if(!v[i]) p[++tot]=i;
for(int j=1;j<=tot&&i*p[j]<=10000000;j++)
{
v[i*p[j]]=1;
if(i%p[j]==0) break;
}
}
}
int main()
{
pre();
cin>>t;
while(t--)
{
ans=1;
scanf("%lld",&n);
for(int i=1;i<=tot&&p[i]*p[i]<=n;i++)
{
if(n%p[i]==0)
{
int e=0;
while(n%p[i]==0)
{
n/=p[i];
e++;
}
ans*=(2*e+1);
}
}
if(n>1) ans*=(2*1+1);
printf("Case %lld: %lld\n",++id,(ans+1)/2);
}
return 0;
}