1.定义:对正整数n,欧拉函数φ(n)指是小于n的所有数中与之互质的个数(包含1)。
如φ(8)=4,因为1,3,5,7均和8互质。
2.表达形式:
n=
p1a1
p
1
a
1
p2a2
p
2
a
2
…
piai
p
i
a
i
(即分解质因数形式)
3.计算公式:
例如:φ(8)=4有1,3,5,7 8=
23
2
3
, φ(8)=8*(1-
12
1
2
)=4.
φ(10)=4有1,3,7,9 10=
21
2
1
51
5
1
, φ(10)=10*(1-
12
1
2
)(1-
15
1
5
)=4.
4.性质:
a)当p为质数时, φ(p) = p – 1。
证明:因为小于本身的数都与该数互质,但是注意φ(1)=1.
b)对于互质的正整数a和n,有a^φ(n) ≡ 1 (mod n) (mod n的意思是两边同时%n).
c)费马小定理:若正整数a 与素数p 互质,则有a^(p - 1)≡1 mod p。
证明:由于性质a可知当p为质数,φ(p) = p -1,代入性质b即可证明。
d)当n为奇数时φ(2n)=φ(n).
e)当n和m互质时,φ(n*m)=φ(n)*φ(m).
f)若n=p^k(p为质数),φ(n)=p^k-p^(k-1).
证明:因为除了p的倍数外,其他数都跟n互质。
5.朴素算法实现:
.根据公式1 :n=
p1k1
p
1
k
1
p2k2
p
2
k
2
…
prar
p
r
a
r
和公式2:φ(n)=n* (1-
1p1
1
p
1
) … (1-
1pk
1
p
k
)可将公式2可拆成n* (1-
1p1
1
p
1
) =n-
pp1
p
p
1
计算。
int euler(int n)
{
int i,ans=n;
for(i=2; i*i<=n; i++)
if(n%i==0)
{
ans=ans-ans/i;
do
n/=i;//把该素因子全部约掉
while(n%i==0);
}
if(n>1)
ans=ans-ans/n;
return ans;
}
6.题目推荐
ps:丢了就是丢了,补完了也觉得缺了点什么,想到了再补吧XD