数论之欧拉函数

来源:互联网 发布:莲花网络意思 编辑:程序博客网 时间:2024/04/28 19:56

1.定义:对正整数n,欧拉函数φ(n)指是小于n的所有数中与之互质的个数(包含1)。
如φ(8)=4,因为1,3,5,7均和8互质。
2.表达形式:
n=p1^a1*p2^a2*……*pi^ai;(即分解质因数形式)
3.计算公式:
例如:φ(8)=4有1,3,5,7 8=2^3, φ(8)=8*(1-1/2)=4.
φ(10)=4有1,3,7,9 10=(2^1)(5^1), φ(10)=10*(1-1/2)(1-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=p1^k1*p2^k2*…pr^kr和公式2:φ(n)=n (1-1/p1) (1-1/pk)可将公式2可拆成n* (1-1/p1)=n-n/p1计算。

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

0 0