[BZOJ2818]Gcd

来源:互联网 发布:mac腾讯助手官方下载 编辑:程序博客网 时间:2024/05/29 08:41

原题地址

Nx,y[1,N]gcd(x,y)(x,y)(N107).

Θ(n).

Θ(n)n,n=p×mpn.

Θ(n)nϕ(n)ϕ(p×m)pn.

然后根据欧拉函数性质:

ϕ(n)={ϕ(np)×p         (npmod p=0)ϕ(np)×(p1) (npmod p0)

为什么?你想一下通式…

然后就可以同时求质数表和欧拉函数了,具体见下面代码.

AC code:

#include <cstdio>typedef long long ll;const int N=10000010;int  n,tot;int  prime[N],phi[N];bool flag[N];ll   ans;ll   S[N];int main(){    scanf("%d",&n);    phi[1]=S[1]=1;    for(int i=2;i<=n;i++){        if(!flag[i]){            prime[++tot]=i;            phi[i]=i-1;        }        for(int j=1;j<=tot&&i*prime[j]<=n;j++){            flag[i*prime[j]]=1;            if(i%prime[j]) phi[i*prime[j]]=phi[i]*(prime[j]-1);            else{                phi[i*prime[j]]=phi[i]*prime[j];                break;            }        }    }    for(int i=2;i<=n;i++) S[i]=S[i-1]+(phi[i]<<1);    for(int i=1;i<=tot;i++) ans+=S[n/prime[i]];    printf("%lld\n",ans);    return 0;}
0 0