BZOJ2226. [Spoj 5971] LCMSum
【题意】
【分析】
这个就是推一波式子
最后这个式子的转换比较套路
【代码】
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e6+5; int np[maxn],p[maxn],cnt,phi[maxn]; void init() { phi[1]=1; for(int i=2;i<maxn;i++) { if(!np[i]) { p[++cnt]=i; phi[i]=i-1; } for(int j=1;j<=cnt && i*p[j]<maxn;j++) { np[i*p[j]]=1; if(i%p[j]==0) { phi[i*p[j]]=phi[i]*p[j]; break; } phi[i*p[j]]=phi[i]*(p[j]-1); } } } ll f[maxn]; int main() { // freopen("a.in","r",stdin); // freopen("a.out","w",stdout); init(); for(int i=2;i<maxn;i++) for(int j=i;j<maxn;j+=i) f[j]+=1LL*i*phi[i]/2; int t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); printf("%lld\n",(f[n]+1)*n); } return 0; }