1)对于素数p,φ(p) = p-1;
2)两个不同的素数p,q ,n=p*qφ(n)= φ(p)* φ(q)=(p-1)*(q-1)
3)互质的正整数a和n,有a^φ(n)≡1 mod n
费马小定理:若正整数 a 与素数 p 互质,则有 a^(p – 1) ≡ 1 mod p 。因为 φ(p) = p -1
4)当b是素数,a%b=0,则:
φ(ab)= φ(a) *b5)p为素数,那么φ(p^k)=p^k – p^(k-1)
欧拉函数的两种求法:1) φ(n)= n(1-1/p1)(1-1/p2)...(1-1/pn)
int euler_phi(int n)
{
int m=(int)sqrt(n+0.5);
int ans=n;
for(int i=2;i<=m;i++)
if(n%i==0) {
ans=ans/i*(i-1);
while(n%i==0) n/=i;
}
if(n>1) ans=ans/n*(n-1);
return ans;
}
因为前后项有关系,所以可以快速打表:小于n且与n互素的整数个数(欧拉函数)的计算
质数p满足p|x,若p2|x,则φ(x)=φ(x/p)*p,若p2|x不成立 则φ(x)=φ(x/p)*(p-1)
(1)若p2|x不成立, 因x/p和p互质,故: φ(x)=φ(x/p)*φ(p)=φ(x/p)*(p-1)
(2)若p2|x, 因 p|(x/p)且p是质数,故 φ(x) = φ(x)=φ(x/p)*p
int euler_phi(int n)
{
int res=1;
for(int i=2;i*i<=n;i++)
if(n%i==0) { //说明i|n
n/=i,res*=i-1;
while(n%i==0) n/=i,res*=i; //说明i^2|n
}
if(n>1) res*=n-1;
return res;
}