欧拉函数

在数论,对正整数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);
            }   
        }       
   }
}

你可能感兴趣的:(欧拉函数)