1968: [Ahoi2005]COMMON 约数研究

时间:2023-03-09 16:32:23
1968: [Ahoi2005]COMMON 约数研究
 #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=;
for(int i=;i<=n;i++)
{
if(!b[i])
{
tot++;
p[tot]=i;
sum[i]=;
f[i]=;
}
for(int j=;j<=tot;j++)
{
if(i*p[j]>n)
break;
b[i*p[j]]=;
if(i%p[j])
{
f[i*p[j]]=f[i]*;
sum[i*p[j]]=;
}
else
{
f[i*p[j]]=f[i]/(sum[i]+)*(sum[i]+);
sum[i*p[j]]=sum[i]+;
}
}
ans+=f[i];
}
printf("%lld\n",ans);
return ;
}

权当练习下线性筛求约数个数。