欧拉函数

来源:互联网 发布:萌照软件下载 编辑:程序博客网 时间:2024/05/01 02:39

欧拉函数在编程中是非常重要的一个版块:


φ函数的值  通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)。 (注意:每种质因数只一个。比如12=2*2*3

欧拉公式

  欧拉公式

那么φ(12)=12*(1-1/2)*(1-1/3)=4



要灵活运用公式:

C++代码:

#include <cstdio>#include <cstdlib> using namespace std; #define N 10000000 int main(int argc, const char *argv[]){    int *phi;    char *prime;    prime = (char*)malloc((N + 1) * sizeof(char));    prime[0] = prime[1] = 0;    for(int i = 2; i <= N; i++)        prime[i] = 1;    for(int i = 2; i + i <= N; i++)        if(prime[i])            for(int j = i * i; j <= N; j += i)                prime[j] = 0;    //这段求出了N内的所有素数    phi = (int*)malloc((N + 1) * sizeof(int));    for(int i = 1; i <= N; i++)        phi[i] = i;    for(int i = 2; i <= N; i++)        if(prime[i])            for(int j = i; j <= N; j += i)                phi[j] = phi[j] / i * (i - 1); //此处注意先/i再*(i-1),否则范围较大时会溢出    return 0;}//这段求出了N内所有数的欧拉函数值


C语言函数,复杂度(sqrt(n))

int eular(int n){int ret=1,i;for(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;}




原创粉丝点击