欧拉定理#
若 gcd(a,m)=1,则满足 aφ(m)≡1(modm)
设 [1,m) 内与 m 互质的数为数列 {bn}={b1,b2,b3,⋯,bφ(m)}
因为 a,m 互质且 bi,m 互质,所以数列 {An}={ab1,ab2,ab3,⋯,abφ(m)} 中每个数都与 m 互质,且两两不同。
同时,由 gcd(abi,m)=1 可得 gcd(abimodm,m)=1,即每个 Ai 除以 m 的余数都与 m 互质,且余数两两不同。
可以用反证法推出“余数两两不同”。假设存在 abi≡abj(modm),那么 abi−abj=km (k∈Z),即 a(bi−bj)=km。由于 a 与 m 互质,那么只能是 m∣(bi−bj),即 bi≡bj(modm)。这与 1≤bi,bj<m 且 bi≠bj 的题设相违背,因此假设不成立。
所以 {An} 中的每个数一定与 {bn} 中的一个数同余,且一一对应。
所以 aφ(m)∏φ(m)i=1bi≡∏φ(m)i=1abi≡∏φ(m)i=1bi(modm)
所以 m∣aφ(m)∏φ(m)i=1bi−∏φ(m)i=1bi
即 m∣(aφ(m)−1)∏φ(m)i=1bi
又因为 gcd(m,∏φ(m)i=1bi)=1
所以 m∣aφ(m)−1
即 aφ(m)≡1(modm)
费马小定理#
当 p 为质数,则 ap−1≡1(modp)
证明:因为 p 为质数时,φ(p)=p−1
扩展欧拉定理#
扩展到不要求互质。
ac≡⎧⎪⎨⎪⎩acmodφ(m)gcd(a,m)=1acgcd(a,m)≠1,c<φ(m)a(cmodφ(m))+φ(m)gcd(a,m)≠1,c≥φ(m)(modm)
case 1#
当 gcd(a,m)=1 时,由欧拉定理知 aφ(m)≡1(modm)
我们可以把指数 c 拆成 k×φ(m)+(cmodφ(m)),那么 ac=(aφ(m))k×acmodφ(m),再取模,就得到
ac≡acmodφ(m)(modm)
case 2#
当 gcd(a,m)≠1 且 c<φ(m) 时,
ac≡ac(modm)
(无需证明)
case 3#
当 gcd(a,m)≠1 且 c≥φ(m) 时,
ac≡a(cmodφ(m))+φ(m)(modm)
证明:
1.转化
要证明上式,只需证 a 的任意一个质因子 pi 满足 pic≡pi(cmodφ(m))+φ(m)(modm)
1.1 证明转化的正确性
如果上式成立,设 a 质因数分解的结果为 a=pr11pr22pr33⋯,其中 pi 为质因数,ri 为其对应的指数
根据同余式可乘可推出 (pic)ri≡(pi(cmodφ(m))+φ(m))ri(modm)
进而 (pr11pr22pr33⋯)c≡(pr11pr22pr33⋯)(cmodφ(m))+φ(m)(modm)
发现这就是 ac≡a(cmodφ(m))+φ(m)(modm)
2.证明转化后的式子
那么现在要证明的东西已经转化,考虑如何证得 pic≡pi(cmodφ(m))+φ(m)(modm)(以下简称 pi 为 p)
2.1 若 m,p 互质
问题转化为 case 1 的情况。为了防止你翻上去,我再推一遍:
gcd(m,p)=1⟹pφ(m)≡1(modm)(欧拉定理)
可以将指数 c 拆成 k×φ(m)+(cmodφ(m)),那么 pc=(pφ(m))k×pcmodφ(m)
再对 m 取模,就得到 pc≡(pφ(m))k×pcmodφ(m)≡1k×pcmodφ(m)≡pcmodφ(m)≡p(cmodφ(m))+φ(m)(modm)
2.2 若 p,m 不互质
由于 p 为质数,则 m 必定 ≥2p。
设 m=s×pr,其中 r=⌊logpm⌋(看作把 m 质因数分解后含有 pr,剩下的都在 s 里,剩下的 s 不含因数 p),那么 gcd(s,pr)=gcd(s,p)=1
根据欧拉定理 pφ(s)≡1(mods)
因为 s,pr 互质,所以 φ(m)=φ(s)×φ(pr)(欧拉函数是积性函数),即 φ(s)∣φ(m)
结合欧拉定理 pφ(s)≡1(mods) 可得
pφ(m)=(pφ(s))φ(pr)≡1φ(pr)=1(mods)
同时乘以 pr 得到
pr+φ(m)≡pr(mods×pr)
m=s×pr,则 pr+φ(m)≡pr(modm)
题设条件 c≥φ(m),显然 φ(m)≥r
本蒟蒻觉得这一点也不显然,花了好久才证明出 φ(m)≥r……QAQ
下面附上我的证明方法(我觉得应该有更简单的方法)
首先 φ(m)=φ(s)×φ(pr)≥φ(pr)(等号在 s=1,2 时取到)
φ(pr)=pr−pr−1=(p−1)×pr−1≥pr−1(p≥2,等号在 p=2 时取到)
数学归纳法证 pr−1≥r:r=1 时显然成立,假设 r=i 时 pi−1≥i 成立,可推知 pi=p×pi−1≥2×pi−1=pi−1+pi−1≥pi−1+1=i+1 成立,因此 pr−1≥r 对任意的 p,r∈Z,p≥2,r≥1 成立
把上面所有的不等号串起来,就是 φ(m)≥r
那么 pc=pc−r×pr≡pc−r×pr+φ(m)=pφ(m)+c(modm)
记 f(x)=xmodm(x≥φ(m)),上式表明:对于任意的正整数 x,f(x+φ(m))=f(x)。反过来 f(x)=f(x−φ(m)),但要注意定义域:此时 x 要满足 x−φ(m)≥φ(m),即 x≥2φ(m)。
如果要计算 f(c),可以递推上面那个式子,每次让 c−=φ(m),但只有 c≥2φ(m) 时才可以这样操作。
我们知道,如果递推条件改成 c≥φ(m),显然最后递推得到的值为 cmodφ(m)。但现在条件是 c≥2φ(m),发现递推条件相差为 φ(m),c≥2φ(m) 比 c≥φ(m) 少减一次 φ(m)。所以只需把这一次 φ(m) 加回来就好了,即 f(c)=f((cmodφ(m))+φ(m)),也就是
ac≡a(cmodφ(m))+φ(m)(modm)
再也不用担心指数爆炸了!!指数也可以取模了
BZOJ3884(推公式)
BZOJ4869(+ 线段树)
参考 CSDN 博主「CaptainHarryChen」的证明思路。十分感谢。
原文链接:https://blog.csdn.net/can919/article/details/82318115
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧