欧拉函数

来源:互联网 发布:中国单晶叶片 知乎 编辑:程序博客网 时间:2024/06/05 18:21

一个数

int eular(int n){    int ret=1;    for(int i=2;i*i<=n;i++){        if(n%i==0){            n/=i,ret*=i-1;            while(n%i==0)n/=i,ret*=i;        }    }    if(n>1)ret*=n-1;    return ret;}

多个数

#define N 100001int e[N];void Init(){    for(int i=1;i<=N;i++)e[i]=i;    for(int i=2;i<=N;i+=2)e[i]/=2;    for(int i=3;i<=N;i+=2)        if(e[i]==i){            for(int j=i;j<=N;j+=i)                e[j]=e[j]/i*(i-1);        }}
1 0
原创粉丝点击