您的位置:首页 > 其它

[bzoj2226][Spoj 5971] LCMSum

2018-01-11 11:35 411 查看
Orz w_yqts

转换成欧拉函数..

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 1000001
int pn,pr
,phi
,flag
;
ll f
;
inline void solve()
{
ll res=0LL;
int n;
scanf("%d",&n);
for (int i=1;i*i<=n;++i)
if (n%i==0)
{
res+=f[i];
if (i*i!=n) res+=f[n/i];
}
printf("%lld\n",res*n);
}
int main()
{
flag[1]=phi[1]=f[1]=1;
for (int i=2;i<N;++i)
{
if (!flag[i]) pr[++pn]=i,phi[i]=i-1;
for (int j=1;j<=pn && pr[j]*i<N;++j)
{
flag[i*pr[j]]=1;
if (i%pr[j]==0) {phi[i*pr[j]]=phi[i]*pr[j];break;}
phi[i*pr[j]]=phi[i]*phi[pr[j]];
}
}
for (int i=2;i<N;++i) f[i]=(ll)(i)*phi[i]/2;
int T;
cin>>T;
while (T--) solve();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: