夜深人静写算法(三十三)- 扩展欧拉定理
Posted 英雄哪里出来
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了夜深人静写算法(三十三)- 扩展欧拉定理相关的知识,希望对你有一定的参考价值。
文章目录
一、前言
最近做公众号,逐渐开始进入迷茫期,原因可能来自于对自己的期望太大吧。其实一开始写算法类的文章,只是为了记录下青春,让将来年迈的自己回头来看当年的自己也曾一腔热血,风华正茂,能有一两个读者赞同我写的内容也曾欣喜若狂。
然而,随着读者不断增多,难免陷入众星捧月的怪圈之中无法自拔,对于现在技术公众号内卷严重,作者比读者还多的情况下,要做到独善其身,不忘初心 真的是一件难能可贵的事情。
二、扩展欧拉定理
- 今天要讲的这个定理,我在一般的初等数论书上没有找到,但是网上可以搜到,怀疑是一些牛逼的 OIer 或者 ACMer 总结出来的,这里再次膜拜一下各位大佬们,让我们这些后辈又可以多刷一些题了。
- 这个定理就是扩展欧拉定理,顾名思义,是对欧拉定理的一种扩展。学了这个定理以后,在解题过程中,你可以把 欧拉定理 和 费马小定理 都忘了,因为它已经完全包含了前面两者。
1、欧拉定理的局限性
- 我们知道欧拉定理的定义如下:
n n n 和 a a a 为正整数,且 n n n, a a a 互素,即 g c d ( a , n ) = 1 gcd(a,n) = 1 gcd(a,n)=1,则: a ϕ ( n ) ≡ 1 ( m o d n ) a^{\\phi(n)} \\equiv 1 (mod \\ n) aϕ(n)≡1(mod n)
- 这个公式可以用来做幂运算的降幂操作,但是有个限制条件就是 n n n, a a a 必须互素。那么,当 n n n, a a a 不互素的时候,如何来做降幂呢?这时就需要用到【扩展欧拉定理】了。
2、扩展欧拉定理定义
【定义1】对于任意正整数 a a a, b b b, c c c,必定满足: a b m o d c = { a b m o d c b < ϕ ( c ) a b m o d ϕ ( c ) + ϕ ( c ) m o d c b ≥ ϕ ( c ) a^{b} \\ mod \\ c = \\begin {cases} a^{b} \\ mod \\ c & { b < \\phi(c)} \\\\ a^{b \\mod \\phi(c) + \\phi(c)} \\ mod \\ c & { b \\ge \\phi(c)} \\end {cases} ab mod c={ab mod cabmodϕ(c)+ϕ(c) mod cb<ϕ(c)b≥ϕ(c)
3、扩展欧拉定理证明
1)引理介绍
- 在定理证明之前,我们需要介绍一些证明扩展欧拉定理成立需要用到的前置知识点,就是所谓的引理。当然了,如果对证明没有兴趣,可以直接看第三部分的 扩展欧拉定理的应用。
【引理1】对于 x ≡ y ( m o d p ) x \\equiv y(mod \\ p) x≡y(mod p) 和 x ≡ y ( m o d q ) x \\equiv y(mod \\ q) x≡y(mod q) 同时成立,且满足 p p p 和 q q q 互素,那么有 x ≡ y ( m o d p q ) x \\equiv y(mod \\ pq) x≡y(mod pq)。
证明:
- 首先, x ≡ y ( m o d p ) x \\equiv y(mod \\ p) x≡y(mod p) 的含义是 ( x − y ) (x-y) (x−y) 是 p p p 的倍数,表示成:
- ( x − y ) = k 1 p (x-y) = k_1p (x−y)=k1p
- 同理,有:
- ( x − y ) = k 2 q (x-y) =k_2q (x−y)=k2q
- 其中, k 1 k_1 k1、 k 2 k_2 k2 均为整数。
- 这里 ( x − y ) (x-y) (x−y) 是 p p p 的倍数,也是 q q q 的倍数,所以它是 p p p 和 q q q 的公倍数,即 l c m ( p , q ) lcm(p,q) lcm(p,q),又因为 p p p 和 q q q 互素,所以 l c m ( p q ) = p q lcm(pq) = pq lcm(pq)=pq,从而得到:
-
x
≡
y
(
m
o
d
p
q
)
x \\equiv y (mod \\ pq)
x≡y(mod pq)
略带不屑的你
【引理2】对于互素的两个数 p p p 和 q q q,有 ϕ ( p q ) = ϕ ( p ) ϕ ( q ) \\phi(pq) = \\phi(p)\\phi(q) ϕ(pq)=ϕ(p)ϕ(q) 成立。
【引理3】(欧拉定理) n n n 和 a a a 为正整数,且 n n n, a a a 互素,即 g c d ( a , n ) = 1 gcd(a,n) = 1 gcd(a,n)=1,则: a ϕ ( n ) ≡ 1 ( m o d n ) a^{\\phi(n)} \\equiv 1 (mod \\ n) aϕ(n)≡1(mod n)
证明:
- 对于【引理2】 和 【引理3】 的证明,可以参考以下文章:夜深人静写算法(三十一)- 欧拉函数。
【引理4】对于素数的幂 p e p^e pe,必然有 ϕ ( p e ) ≥ e \\phi(p^e) \\ge e ϕ(pe)≥e;
证明:
- 首先根据欧拉函数的性质,我们知道 ϕ ( p e ) = p e − 1 ( p − 1 ) \\phi(p^e) = p^{e-1}(p-1) ϕ(pe)=pe−1(p−1),对于这个函数而言, p p p 越大,值越大,所以我们取 p p p 最小的情况,如果能够满足 ϕ ( p e ) ≥ e \\phi(p^e) \\ge e ϕ(pe)≥e,那么对所有的 p , e p,e p,e 就都能成立了。
- 令 g ( e ) = p e − 1 ( p − 1 ) − e g(e) = p^{e-1}(p-1) - e g(e)=pe−1(p−1)−e,当 p = 2 p=2 p=2 时,有 g ( e ) = 2 e − 1 − e g(e) = 2^{e-1} - e g(e)=2e−1−e,很容易得到整函数随着 e e e 的增大, g ( e ) g(e) g(e) 会越来越大,所以必然可以满足 2 e − 1 ≥ e 2^{e-1} \\ge e 2e−1≥e;
- 从而,
ϕ
(
p
e
)
≥
e
\\phi(p^e) \\ge e
ϕ(pe)≥e 得证。
若有所思的你
2)定理证明
- 我们发现,当 b < ϕ ( c ) b < \\phi(c) b<ϕ夜深人静写算法(三十一)- 欧拉函数