欧拉函数

来源:互联网 发布:大数据 培训 编辑:程序博客网 时间:2024/05/18 02:39

在数论,对正整数n,欧拉函数是小于n的数中与n互质的数的数目.通式:euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn) ,其中p1, p2……pn为x的所有质因数,x是不为0的整数。

int euler_phi(int n){    int s = n;    for(int i = 2; i * i <= n; i++){        if(n % i == 0){            s = s / i * (i-1);            while(n % i == 0)              n /= i;        }    }    if(n > 1)       s = s / n * (n-1);    return s;   }//打表 void phi_table(int n, int *phi){    for(int i = 2; i <= n; i++)       phi[i] = 0;    phi[1] = 1;    for(int i = 2; i <= n; i++){        if(!phi[i]){            for(int j = i; j <= n; j += i){                if(!phi[j])                      phi[j] = j;                phi[j] = phi[j] / i * (i-1);            }           }          }}
0 0