欧拉函数和欧拉定理

来源:互联网 发布:sql中的服务器名称 编辑:程序博客网 时间:2024/04/29 06:08

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) *b

5)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互素的整数个数(欧拉函数)的计算

2) 递推法, 根据上面定理4,2:
质数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|nn/=i,res*=i-1;while(n%i==0) n/=i,res*=i;  //说明i^2|n}if(n>1) res*=n-1;return res;}


0 0
原创粉丝点击