定义
欧拉函数是小于n的正整数中与n互质的数的数目。它又称为Euler’s totient function、φ函数、欧拉商数。 例如φ(8)=4,因为1,3,5,7均和8互质。
性质
性质一
对于一个质数n, φ(n)=n−1
证明:因为质数n与1~n-1都是互质。
性质二
若p是质数, n=pk ,则 φ(n)=pk−pk−1=(p−1)pk−1=(1−1p)pk
证明:
因为除了p的倍数外,其他数都跟n互质。其中1~ pk 之间有 pk−1 个,因为p的倍数有p,2p,3p…,( pk−1−2 )p,( pk−1−1 )p,( pk−1 )p.
性质三
当
gcd(n,m)=1
时,
φ(nm)=φ(n)∗φ(m)
证明:
φ(n)
是积性函数。
下面证明引用了《数论概要》的第11章的证明
我们找到一个包含 φ(mn) 个元素的集合,再找一个包含
φ(m)φ(n) 个元素的第二个集合,然后证明这两个>集合包含个数相同的元素.
第一个集合是{a : 1≤a≤mn,gcd(a,mn)=1 }
显然,这个集合包含 φ(mn) 个元素,因为这正好是 φ 的定义。
第二个集合是 (b,c):1≤b≤m,gcd(b,m)=1,1≤c≤n,gcd(c,n)=1 .
那么有多少个序对(b,c)呢?正好对b有 φ(m) 个选择,因为这是 φ(m) 的定义,对c有 φ(n) 个选择,因为这是 φ(n) 的定义.所以对于第一个坐标b有 φ(m) 个选择,对第二个坐标c有 φ(n) 个选择,从而对序对(b,c)总共有 φ(m)φ(n) 个选择。
(1)在第一个集合取 a1,a2 使得
a1≡a2 (mod m)与 a1≡a2 (mod n)
所以 a1−a2 被m与n整除,然而m与n互素,所以 a1−a2 一定被mn整除,所以 a1≡a2 (mod mn),也就是说 a1 和 a2 是同一个数。
(2)利用中国剩余定理可以证得对于第二个集合的数,有且仅有一个a对应 a≡b (mod m), a≡c (mod n)
由(1)(2)可证得第一个和第二个集合是一一对应,也就是说 φ(mn)=φ(m)∗φ(n) ,得证。
性质四
设 n=pk11∗pk22...∗pkmm,则φ(n)=n∗(1−1p1)∗(1−1p2)...∗(1−1pm)
证明:
根据性质二 、性质三可得,
φ(n)=φ(pk11)∗φ(pk22)...φ(pkmm)
=(1−1p1)pk11∗(1−1p2)pk22...(1−1pm)pkmm
=pk11∗pk22...∗pkmm(1−1p1)(1−1p2)...∗(1−1pm)
=n∗(1−1p1)(1−1p2)...∗(1−1pm)
性质五
对于互质的整数a,m有 aφ(m)≡1 (mod m)。
性质六
设小于n的所有与n互质的数的和为sum,则sum = n * φ(n)2
证明:
首先证明:如果gcd(n,i) = 1 则gcd(n,n-i) = 1
反证法:如果存在k ≠ 1 使得gcd(n , n- i) = k,则
(n - i) mod k = 0 , n mod k = 0;
可得 i mod k = 0, 即gcd(n,i) = k,
也就是说如果gcd(n,i) = 1 ,那么gcd(n, n-i)就不能大于1.
那么就可以知道与n互质的数是成对存在的,并且和为n,那么可得sum = n * φ(n)2
代码
//直接求解欧拉函数
int euler(int n){ //返回euler(n)
int res=n,a=n;
for(int i=2;i*i<=a;i++){
if(a%i==0){
res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出
while(a%i==0) a/=i;
}
}
if(a>1) res=res/a*(a-1);
return res;
}