【待完善】欧拉函数

说明:本篇文章待完善中,如有错误,感谢指正。

文章中涉及的其它名词:

质数 
互质 
质因数


欧拉函数

简介

定义

欧拉函数值是指小于n的正整数中与n互质的数的个数,记为φ(n),其中n为正整数,规定φ(1)=1。例如φ(8)=4,因为符合要求的数有1,3,5,7,共4个。φ: N→N,n→φ(n),称为欧拉函数。

一般公式:

这里写图片描述 
其中这里写图片描述是x的第i个质因数,n代表所有,即x的所有质因数。

性质

  1. 若n为质数,则有这里写图片描述
  2. 这里写图片描述,其中p为质数,k为正整数。
  3. 这里写图片描述,其中m,n互质。
  4. 若n为质数,且m%n=0,则
  5. 若n为奇数,则 这里写图片描述

代码实现:

//计算1到N内所有数的欧拉函数值,结果存放在phi数组中 
#define N 1000
#define MAXN N+5

int phi[MAXN];//欧拉函数,初值为0 
int m[MAXN];//m[i]代表i是否是质数,0:是质数, 1不是质数,初值为0 
int p[MAXN];//存放质数,初值为0 
int num_p;//当前已得到的质数的个数, 初值为0 

void get_phi(){
    phi[1]=1;
    for(int i=2;i<=N;i++){
        if(p[i]==0){//性质1
            p[++num_p]=i;
            phi[i]=i-1; 
        } 
        for(int j=1;j<=num_p && p[j]<i*N;j++){
            m[p[j]*i]=1;//确定p[j]*i不是质数
            if(i%p[j]==0){
                phi[i*p[j]]=phi[i]*p[j];//性质4
                break;
            } 
            else phi[i*p[j]]=phi[i]*(p[j]-1);//性质3和1
        }
    } 
}

猜你喜欢

转载自blog.csdn.net/wingrez/article/details/81390659