说明:本篇文章待完善中,如有错误,感谢指正。
文章中涉及的其它名词:
质数
互质
质因数
欧拉函数
简介
定义
欧拉函数值是指小于n的正整数中与n互质的数的个数,记为φ(n),其中n为正整数,规定φ(1)=1。例如φ(8)=4,因为符合要求的数有1,3,5,7,共4个。φ: N→N,n→φ(n),称为欧拉函数。
一般公式:
其中是x的第i个质因数,n代表所有,即x的所有质因数。
性质
- 若n为质数,则有。
- ,其中p为质数,k为正整数。
- ,其中m,n互质。
- 若n为质数,且m%n=0,则。
- 若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
}
}
}