欧拉函数与欧拉定理

来源:互联网 发布:mac口红质地 编辑:程序博客网 时间:2024/04/29 20:36

转载请说明出处:http://blog.csdn.net/leader_one/article/details/77619762

说在前面

按照惯例,出于尊重,还是简单介绍一下这位多产的学术伟人
莱昂哈德·欧拉(Leonhard Euler ,1707年4月15日~1783年9月18日),瑞士数学家、自然科学家。1707年4月15日出生于瑞士的巴塞尔,1783年9月18日于俄国圣彼得堡去世。欧拉出生于牧师家庭,自幼受父亲的影响。13岁时入读巴塞尔大学,15岁大学毕业,16岁获得硕士学位。欧拉是18世纪数学界最杰出的人物之一,他不但为数学界作出贡献,更把整个数学推至物理的领域。他是数学史上最多产的数学家,平均每年写出八百多页的论文,还写了大量的力学、分析学、几何学、变分法等的课本,《无穷小分析引论》、《微分学原理》、《积分学原理》等都成为数学界中的经典著作。欧拉对数学的研究如此之广泛,因此在许多数学的分支中也可经常见到以他的名字命名的重要常数、公式和定理。
这篇文章要讲的就是欧拉函数及欧拉定理。


欧拉函数

简介欧拉函数
首先,没有欧拉函数是没有欧拉定理滴。
在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。此函数以其首名研究者欧拉命名(Euler’so totient function),它又称为Euler’s totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。


如何求欧拉函数
这里有个通式
通式
(φ这个符号好难打。。就直接挂图了)
其中每个p是x互不相同的质因数,x为正整数,φ(1)=1,同时显然的任意一个质数的φ就是它自己减一。
通式的实质是将与x有大于1的公约数的数全部筛掉了。
这样求单个φ可以,但求一大串效率是不是太低了?


利用欧拉函数的特殊性质求φ
首先,p为质数
若i mod p = 0,则φ(i * p) = φ(i) * p;
若i mod p > 0,则φ(i * p) = φ(i) * (p-1);
证明自己看看同时就懂了。
这样我们O(n)的求出1~n的φ,如同用欧拉筛法求质数一样,φ也可以用筛法求质数的同时求。
直接挂代码吧:

for(i=1;i<=n;i++){    if(prime[i]) //判断是否质数    {        phi[i] = i-1;        num++;        zs[num] = i;    }    //筛质数顺便求解    for(j=1;i*zs[j]<=n && j<=num;j++)    {        prime[i*zs[j]] = false;        if(i%zs[j]!=0) phi[i*zs[j]] = phi[i]*phi[zs[j]];            else phi[i*zs[j]] = phi[i]*zs[j];    }}

与欧拉筛法求质数的方式如出一辙。


欧拉函数的一些应用

  1. 求1~n内与n互质的数的个数,直接就是φ。
  2. 求1~n内与n互质的数的总和,就是n * φ(n)/2;(1~n内与n互质的数具有对称性,即gcd(x,n)=1,则gcd(n-x,n)=1)
  3. 接下来要讲的欧拉定理
  4. ……

欧拉定理

简介欧拉定理
若gcd(a,p)=1,则a^φ(p) ≡ 1 (mod p) 这个定理可以求乘法逆元(乘法逆元讲解)。
而且包含了费马小定理(a ^ (p-1) ≡ 1 (mod p)要求p为质数),因为当p为质数时φ(p) = p-1。


证明
将1~n中与n互质的数按顺序排布:x1,x2……xφ(n) (显然,共有φ(n)个数)
我们考虑这么一些数:
m1=a * x1;m2=a * x2;m3=a * x3 …… mφ(n) = a * xφ(n);
一、这些数中的任意两个都不模n同余
因为如果有mS≡mR (mod n) (这里假定mS更大一些),就有:
mS-mR=a(xS-xR)=qn,即n能整除a(xS-xR);
但是a与n互质,而且xS-xR < n,因而左式不可能被n整除;
也就是说这些数中的任意两个都不模n同余,φ(n)个数有φ(n)种余数。

二、这些数除n的余数都与n互质
设r = a * xi mod n,则a * xi = qn+r;
设d = gcd(qn+r,n),因为a与n互质,xi与n互质,所以qn+r与n互质,所以d = 1;
由欧几里得定理(欧几里得讲解)得,gcd(r,n) = gcd(qn+r,n);
所以gcd(r,n) = 1,即余数与n互质。

由上可知,数m1,m2,m3……mφ(n)(如果将其次序重新排列)mod n必须相应地同余于x1,x2,x3……xφ(n)。
故得出:m1 * m2 * m3……mφ(n) ≡ x1 * x2 * x3……xφ(n) (mod n)
或者说a^φ(n) * (x1 * x2 * x3……xφ(n)) ≡ x1 * x2 * x3……xφ(n) (mod n)
两边同时消去x1 * x2 * x3……xφ(n),得 a^φ(n) ≡ 1 (mod n),得证。


欧拉定理的应用及推广

求解乘法逆元;
取模时降幂 若a,n互质 a^k ≡ a^(k mod φ(n)) (mod n) 显然的;
扩展欧拉定理:
这里写图片描述
有没有觉得和上一个应用有点像?好像没什么用?
实际上功能强大,可以在 a和m不互质的时候使用,非常强的一种降幂方式,具体证明这里不在赘述,有链接(点这里)。

在处理许多关于模的问题时,尤其是OI类赛事,欧拉函数及定理是不可或缺的利器!


按照惯例再说两句

本人蒟蒻一枚,博客难免有误,发现错误的大牛牪犇可以发私信联系本人指正错误。另外本博客可能会更新,可以考虑收藏一下。
好了,暂时就讲这么多了,如果绝对这里讲解得不够详细,也可以私信联系本人交流一下。
欢迎转载,转载请说明出处,谢谢。