4
4
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const int N=10000005; 5 int n; 6 ll sum[N],vis[N],p[N],phi[N]; 7 int main() 8 { 9 scanf("%d",&n); 10 memset(vis,1,sizeof(vis)); 11 vis[0]=vis[1]=false; 12 phi[1]=1; 13 for(int i=2;i<=n;i++) 14 { 15 if(vis[i])p[++p[0]]=i,phi[i]=i-1;//记得找出质数 16 for(int j=1;j<=p[0]&&p[j]*i<=n;j++) 17 { 18 vis[p[j]*i]=false; 19 if(i%p[j])phi[i*p[j]]=phi[p[j]]*phi[i]; 20 else 21 { 22 phi[i*p[j]]=p[j]*phi[i]; 23 break; 24 } 25 }//线性筛法 26 } 27 for(int i=1;i<=n;i++)sum[i]=sum[i-1]+phi[i];//前缀和 28 ll ans=0; 29 for(int i=1;i<=p[0]&&p[i]<=n;i++)//枚举1~n中的所有质数 30 ans+=(sum[n/p[i]]<<1)-1;//sum[n/p]*2-1 31 printf("%lld",ans); 32 return 0; 33 }
原文:https://www.cnblogs.com/ljy-endl/p/11409675.html