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;
}

 

posted @ 2021-06-07 11:55  andyc_03  阅读(27)  评论(0编辑  收藏  举报