1. 定义: 欧拉函数 Φ(X) 为小于等于X且与X互质的数的个数
2. 重要性质
○1.Φ(p)=p-1 (p是质数).
○2.Φ(x)为积性函数 即 Φ(p*q)=Φ(p)×Φ(q) 其中 p,q互质 .
○3.Φ(pk)=(p-1)×(pk-1) (p是质数).
○4.当p为质数且p|x时,Φ(x*p)=Φ(x)*p.
○5.设n是一个正整数,
○6.设
,那么有
○7.若a与n互质,那么若
则
(由欧拉定理易得)
性质3的证明:
∵pk 仅含有 p 这一个质因子故小于 pk的不与之互质的数仅有p的倍数,共有(pk/p)=pk-1个
即Φ(pk)=pk-pk-1=pk-1×(p-1) 即证
性质4的证明:
∵p|x 令P为x的质因子集合(1-1/P)=(1-1/p1)×…×(1-1/pn)
∴Φ(x)=x*(1-1/P) Φ(p)=p-1
∴Φ(x*p)=(x*p)(1-1/P) (引入p后质因子集合不变 ∵p是x的质因子)
∴Φ(x)=x*(1-1/P)*p=Φ(x)*p, 即证
3. 求法 :
通项公式:
证明如下:
预备知识:
1. Φ(p)=p-1 (p是质数).
2. 唯一分解定理: X=(p1k1 × p2k2….×pnkn) 其中p为X的质因子.
3. Φ(x)为积性函数 即 Φ(p*q)=Φ(p)×Φ(q) 其中 p,q互质 .
4. Φ(pk)=(p-1)×(pk-1)
证明:
Φ(X)=Φ(p1k1 × p2k2….×pnkn)其中p为X的质因子
∵X的质因子的任何次方都互质
∴Φ(X)=Φ(p1k1) × Φ(p2k2)×….×Φ(pnkn)
而Φ(pk)=(p-1)×(pk-1)
∴Φ(X)=(p1-1) ×(p2-1)×….×(pn-1)(p1k1-1 ×p2k2-1….×pnkn-1)
每项提出一个pi即得 Φ(X)=X*Π(1-1/pi)
4. 公式法和线性递推法求解欧拉函数
1.
公式法
inline int phi(int x)
{
if(x==1) return 1;
int res=x;
for(register int i=2;i<=sqrt(x);i++){
if(x%i==0){
res-=res/i;
while(x%i==0) x/=i;
}
}
if(x!=1) res-=res/x;//最后一个也要算;
return res;
}
2. 递推法
for(int i=2;i<=n;i++){
if(!vis[i]) {prime[++tot]=i;phi[i]=i-1;}
for(int j=1;j<=tot;j++){
if(1ll*i*prime[j]>n) break;
vis[i*prime[j]]=1;
if(i%prime[j]==0) {
phi[i*prime[j]]=phi[i]*prime[j];
//当 prime[j]是i的约数时,phi[i*prime[j]]=phi[i]*prime[j];
break;
}
phi[i*prime[j]]=phi[i]*(phi[prime[j]]);
//否则,phi[i*prime[j]]=phi[i]*phi[j] =phi[i]*(prime[j]-1);
}
}
简单例题
例1.luogu-P2158 [SDOI2008]仪仗队 题解
例3.HDU-2588 GCD 题解