您的位置:首页 > 其它

1968: [Ahoi2005]COMMON 约数研究

2016-03-18 06:15 274 查看
#include<cstdio>
#include<iostream>
#define M 1000008
using namespace std;
long long tot,f[M],sum[M],ans,n,b[M],p[M];
int main()
{
scanf("%d",&n);
ans=1;
for(int i=2;i<=n;i++)
{
if(!b[i])
{
tot++;
p[tot]=i;
sum[i]=1;
f[i]=2;
}
for(int j=1;j<=tot;j++)
{
if(i*p[j]>n)
break;
b[i*p[j]]=1;
if(i%p[j])
{
f[i*p[j]]=f[i]*2;
sum[i*p[j]]=1;
}
else
{
f[i*p[j]]=f[i]/(sum[i]+1)*(sum[i]+2);
sum[i*p[j]]=sum[i]+1;
}
}
ans+=f[i];
}
printf("%lld\n",ans);
return 0;
}


权当练习下线性筛求约数个数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: