欧拉定理及其应用(注解版)~~YT
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
欧拉定理及其应用
欧拉函数phi(m)表示小于等于|m|的自然数中,和m互质的数的个数。
phi(m)=mΠ(1-1/p)//《算法导论》第531页
p|m
证明:若m为一素数p,则phi(m)=p-1。
若m为合数,存在p,使m=pd。
1、若p整除d,对任意a,(a, d) = 1,//注意a属于[1,d)那么(a + d, d) = 1,
(a + d, p) = 1,
所以(a + d, m) = 1,所以(a + kd, m) = 1,k = 0, 1, 2, ... , p - 1,
所以phi(m) = p phi(d)。//则有任意和d互质的数加上kd继续互质,所以共有p*phi(d)个
2、若p不能整除d,那么(p, d) = 1,在小于|m|的自然数里,和d互质的有p phi(d)个,
其中phi(d)个是p的倍数,所以phi(m) = (p - 1) phi(d)。//显然,除d、2d、3d……pd能整除外,其余都不能整除
由数学归纳法得到结论。
欧拉定理:如果(a, m) = 1,那么a ^ phi(m) = 1 (mod m)。//可以参考《算法导论》
证明:设R(m) = {r[1], r[2], ... , r[phi(m)]}为和m互质的数的等价类的集合。
那么有(ar[i], m) = 1,ar[i] = ar[j]当且仅当i = j。
所以aR(m) = {ar[i]} = R(m),a ^ phi(m) Πr[i] = Πar[i] = Πr[i] (mod m),a ^ phi(m) = 1 (mod m)。
欧拉定理的一个重要意义就是计算a ^ b mod m的时候,若b是一个很大的数时,可以化成a ^ (b mod phi(m)) mod m来计算,明显地,b mod phi(m)是一个比较小的数。
当(a, m)≠1时,设对m分解质因数得到m = Πpi ^ ri,d = (a, m),m = m1 * m2,
其中m1 = Πpi ^ri,那么(m1, m2) = 1,(a, m2) = 1,
pi|d
所以a ^ phi(m2) = 1 (mod m2)。
由欧拉函数的计算公式可以得知phi(m2)|phi(m),所以a ^ phi(m) = 1 (mod m2)。对任意i,pi|d,都有phi(m) >= log m >= ri,所以m1|d ^ phi(m),m1|a ^ phi(m)。由于(m1, m2) = 1,所以存在整数r,0 < r < m,r = 1 (mod m2),r = 0 (mod m1),
有a ^ phi(m) = r (mod m)。
显然,a ^ 2phi(m) = 1 (mod m2),a ^ 2phi(m) = 0 (mod m1),
所以a ^ 2phi(m) = a ^ phi(m) (mod m)。
因此,即使(a, m)≠1,也能很快地得到a ^ b mod m的结果。
例题1:TC SRM273 FactorialTower
计算a[0]! ^ a[1] ^ a[2]! ^ ... ^ a[n - 1]! mod m
//递归得到,
/*
a[0]^a[1]^a[2]^…^a[n-1]mod m等价于先求出phi(m)令m1=phi(m),
再用a[1]^a[2]^…^a[n-1]mod (m1),等价于先求出phi(m1),令m2=phi(m1),
再用a[2]^a[3]^…^a[n-1]mod (m2),等价于先求出phi(m2),令m3=phi(m2),
……
最后就有a[n-1] mod (m[n-1])。。。逆向返回
*/
/*
注意,上面我们只是单方面用了递归思想,还要考虑下m1>m2>m3……
所以至多在m-1步之后,m[m-1]=1(至于为什么为1,而不是0,显然哈~~这儿不做详细解释了),所以更高阶的将不需要计算,
我只是给出了上界,下面我将修正它*********
*/
根据前面的结论,可以通过递归计算得到结果。
每一步里面,计算phi(m)的复杂度为O(sqrt(m)),计算a[i] ^ b mod m复杂度为O(a[i] + log m) //a ^ b mod m==a ^ (b mod phi(m)) mod m
由于a[i] < m,所以一步的复杂度为O(m)。
若m为偶数,则phi(m) <= m / 2。若m为奇数,则phi(m)为偶数。
且当m含有至少一个奇数的质因子时,phi(m)中2的次数不会少于m中2的次数。
//注意这句话,再结合上面给出算法的计算过程:m[i+1]=phi(mi),且有若m为偶数,则phi(m) <= m / 2,应用二分的思想,所以只要min{O(logm), n}步就能完成整个过程
//据以上注解,********的上界就可以修正为logm了。。
所以只要min{O(logm), n}步就能完成整个过程。
因此,整体复杂度为O(mlogm)。//显然啦~~~
例题2:Strange Limit
设a1 = p,p为一质数,an+1 = p ^ an,bn = an mod m!,给出p, m,2 <= p, m <= 12,求lim bn,1 <= n, m, t <=100
n->∞
这题和上面那题很相似,只要计算到phi(m' = m!) = 1的时候,即可保证收敛。这里保证了m的因子在一个很小的范围内,可认为计算phi(m')的时间为O(1)。求余运算所需时间约O(log m'),共需要O(log m')步,所以总的复杂度为O(log ^ 2 m') = O(m ^ 2 log ^ 2 m)。//不是很难,大致说下,注意m不大,而phi(m)