bzoj 4805: 欧拉函数求和

来源:互联网 发布:c语言是解释型语言吗 编辑:程序博客网 时间:2024/06/08 06:47

题意:求inϕ(i)

同3944杜教筛
code:

#include<cstdio>#include<cstdlib>#include<iostream>#include<cstring>#define LL long longusing namespace std;int pr=0;LL phi[5000010],prime[5000010];bool v[5000010];void pre(){    memset(v,true,sizeof(v));    pr=0;phi[1]=1;    for(int i=2;i<=5000000;i++)    {        if(v[i]) prime[++pr]=(LL)i,phi[i]=(LL)(i-1);        for(int j=1;j<=pr&&(LL)i*prime[j]<=5000000;j++)        {            v[i*prime[j]]=false;            if(i%prime[j]==0){phi[i*prime[j]]=phi[i]*prime[j];break;}            phi[i*prime[j]]=phi[i]*(prime[j]-1);        }    }//  for(int i=1;i<=10;i++) printf("%d ",phi[i]);printf("\n");    for(int i=2;i<=5000000;i++) phi[i]+=phi[i-1];}LL solve(int n){    if(n<=5000000) return phi[n];    LL ans=0;int pos;    for(int i=2;i<=n;i=pos+1)    {        pos=n/(n/i);        ans+=(pos-i+1)*solve(n/i);    }    return (LL)n*(n+1)/2-ans;}int main(){    pre();    int n;scanf("%d",&n);    printf("%lld",solve(n));}
原创粉丝点击