分类课程智能体AI
文章
订阅
分类课程AI导师
文章
价格
课程进度
7 / 7
上一节同余是什么
自在学

© 2025 - 2026 株洲市自在学教育科技有限公司 版权所有

公网安备湘公网安备43020302000292号 | 湘ICP备2025148919号-1

关于我们隐私政策使用条款

© 2025 - 2026 株洲市自在学教育科技有限公司 版权所有

公网安备湘公网安备43020302000292号湘ICP备2025148919号-1

数学基础数论同余的应用

同余的应用

一个数除以另一个数,最后剩几?这个“剩几”,很多时候比原来的数本身还重要。

比如今天星期一,100 天后星期几?你当然不会真的数 100 个格子。因为星期每 7 天转一圈,100100100 除以 777 余 222,所以只要从星期一往后挪 2 天,就是星期三。这就是同余。

再比如一个很大的密码系统,电脑并不会傻乎乎地把天文数字完整算出来,它也会不断问:“这个数模某个数之后,余数是多少?”同余就是这种“只看余数”的语言。

这节我们要看的几件事,表面上一个比一个抽象:费马小定理、威尔逊定理、中国剩余定理、RSA 加密、日历计算。但你可以把它们看成同一个故事的不同章节:我们学会了余数的规则,然后开始用它解决真正的问题。


费马小定理

先讲个有点“数学圈段子”味道的故事。

费马是法国人,本职是律师,数学属于业余爱好。但这位业余玩家很猛,经常在信里或者书页空白处写一句“我发现了一个很妙的结论”,然后不写证明,留给后人慢慢补作业。

费马小定理就是这样一条结论。它说的是:如果 ppp 是素数,那么很多数在模 ppp 的世界里,都会出现一个非常稳定的循环。

费马小定理:设 ppp 是素数,aaa 是整数且 p∤ap \nmid ap∤a(也就是 aaa 不能被 ppp 整除),则

ap−1≡1(modp)a^{p-1} \equiv 1 \pmod{p}ap−1≡1(modp)

也可以写成一个更宽松的版本:对任意整数 aaa,都有

ap≡a(modp)a^p \equiv a \pmod{p}ap≡a(modp)

这句话第一次看可能有点硬。我们拿数字试一下。

取 p=5p=5p=5,a=3a=3a=3。费马小定理说 343^{4}34 除以 555 应该余 111。算一下:34=813^4=8134=81,而 81=16×5+181=16 \times 5+181=16×5+1,确实余 111。

再取 p=7p=7p=7,a=4a=4a=4。它说 464^646 除以 777 也应该余 111。46=40964^6=409646=4096,4096=585×7+14096=585 \times 7+14096=585×7+1,还是余 111。

它背后的直觉其实不难:在模 ppp 的世界里,如果 aaa 和 ppp 互质,那么 a,2a,3a,…,(p−1)aa,2a,3a,\ldots,(p-1)aa,2a,3a,…,(p−1)a 这些数取余以后,只是把 1,2,3,…,p−11,2,3,\ldots,p-11,2,3,…,p−1 重新洗了一遍顺序。既然只是重新排队,所有数乘起来的余数不变。把两边能约掉的部分约掉,就会得到 ap−1≡1(modp)a^{p-1}\equiv 1 \pmod pap−1≡1(modp)。

那它有什么用?最常见的有三种。

第一,算大幂次的余数。

比如要算 3100 mod 73^{100} \bmod 73100mod7。直接算当然也行,但很笨。因为 777 是素数,根据费马小定理:

36≡1(mod7)3^6 \equiv 1 \pmod 736≡1(mod7)

于是指数每多 666,余数就绕回一圈。100=6×16+4100=6 \times 16+4100=6×16+4,所以

3100=(36)16⋅34≡116⋅81≡4(mod7)3^{100}=(3^6)^{16}\cdot 3^4 \equiv 1^{16}\cdot 81 \equiv 4 \pmod 73100=(36)16⋅34≡116⋅81≡4(mod7)

原本是一个很大的幂,最后只用算 343^434。这就是“把指数压小”的威力。

第二,求模意义下的“除法”。

普通算术里,5/35/35/3 就是除以 333。但在模运算里,我们更喜欢说:除以 333,等于乘以 333 的逆元。所谓逆元,就是找一个数 xxx,让

3x≡1(mod7)3x \equiv 1 \pmod 73x≡1(mod7)

试一下就知道 x=5x=5x=5,因为 3×5=15≡1(mod7)3 \times 5=15\equiv 1 \pmod 73×5=15≡1(mod7)。所以在模 777 的世界里,3−1≡53^{-1}\equiv 53−1≡5。

费马小定理给了一个通用办法:如果 ppp 是素数,且 p∤bp\nmid bp∤b,那么

b−1≡bp−2(modp)b^{-1}\equiv b^{p-2}\pmod pb−1≡bp−2(modp)

因为 b⋅bp−2=bp−1≡1(modp)b\cdot b^{p-2}=b^{p-1}\equiv 1 \pmod pb⋅bp−2=bp−1≡1(modp)。这在算法和密码学里很常见,尤其配合快速幂,电脑算起来非常快。

第三,判断一个数“像不像素数”。

如果 nnn 真的是素数,那么对很多 aaa,应该有 an−1≡1(modn)a^{n-1}\equiv 1 \pmod nan−1≡1(modn)。反过来,如果你找到某个 aaa,让这个式子不成立,那 nnn 肯定不是素数。

当然,这个方法不是百分之百完美。有些合数很会伪装,比如卡迈克尔数,会骗过一些费马测试。但这个思路很重要,后来的米勒-拉宾素性测试就是在它的基础上变得更可靠。今天很多大素数的筛选,都离不开这种“先用同余试探一下”的思想。


威尔逊定理

如果说费马小定理是在看“幂次”,那威尔逊定理就是在看“阶乘”。

它的味道很不一样。费马小定理像是在说:素数让幂次产生周期。威尔逊定理则像是在说:素数会让 111 到 p−1p-1p−1 这些数在乘起来之后,刚好留下一个 −1-1−1。

威尔逊定理:正整数 ppp 是素数,当且仅当

(p−1)!≡−1(modp)(p-1)! \equiv -1 \pmod{p}(p−1)!≡−1(modp)

注意这里是“当且仅当”。也就是说,素数一定满足这个式子;反过来,满足这个式子的数也一定是素数。

我们先不急着证明,先看几个小例子。

p=5p=5p=5 时,4!=244!=244!=24,除以 555 余 444,而 4≡−1(mod5)4\equiv -1\pmod 54≡−1(mod5)。

p=7p=7p=7 时,6!=7206!=7206!=720,除以 777 余 666,而 6≡−1(mod7)6\equiv -1\pmod 76≡−1(mod7)。

如果换成合数,比如 n=6n=6n=6,5!=1205!=1205!=120,除以 666 余 000,就不是 −1-1−1 了。

为什么偏偏会剩 −1-1−1?这里有一个很漂亮的配对故事。

在模 ppp 的世界里,1,2,…,p−11,2,\ldots,p-11,2,…,p−1 每个数都有乘法逆元。大多数数的逆元都不是自己,于是它们可以两两配对,乘积都是 111。

比如模 777:

2⋅4≡1(mod7),3⋅5≡1(mod7)2\cdot 4\equiv 1 \pmod 7,\quad 3\cdot 5\equiv 1 \pmod 72⋅4≡1(mod7),3⋅5≡1(mod7)

配来配去,最后只有两个数比较特殊:111 和 p−1p-1p−1。因为 111 的逆元是自己,p−1≡−1p-1\equiv -1p−1≡−1 的逆元也是自己。

所以 (p−1)!(p-1)!(p−1)! 里,大多数因子都两两乘成 111,最后只剩

1⋅(p−1)≡−1(modp)1\cdot (p-1)\equiv -1\pmod p1⋅(p−1)≡−1(modp)

这就是威尔逊定理最核心的画面。

它有什么用?最常见的是处理“接近 ppp 的阶乘余数”。

比如算 5! mod 75!\bmod 75!mod7。我们知道

6!≡−1≡6(mod7)6!\equiv -1\equiv 6\pmod 76!≡−1≡6(mod7)

而 6!=6⋅5!6!=6\cdot 5!6!=6⋅5!,所以

6⋅5!≡6(mod7)6\cdot 5!\equiv 6\pmod 76⋅5!≡6(mod7)

因为 6≡−16\equiv -16≡−1,它自己的逆元还是 666。两边乘以 666,得到

5!≡36≡1(mod7)5!\equiv 36\equiv 1\pmod 75!≡36≡1(mod7)

这类题的套路就是:先用威尔逊定理抓住 (p−1)!(p-1)!(p−1)!,再往回倒推。

费马小定理与威尔逊定理对比图:左侧展示费马小定理,以p=7为例,列出a=1,2,3,4,5,6的a^6 mod 7的计算结果,全部等于1,体现指数为p-1的统一行为;右侧展示威尔逊定理,以p=7为例,展示1×2×3×4×5×6的配对消去过程(2与4配对,3与5配对,剩余1和6),最终乘积等于6≡-1


中国剩余定理

《孙子算经》里有一道老题,大意是:有一堆东西,不知道多少个。三个三个数,剩 222 个;五个五个数,剩 333 个;七个七个数,剩 222 个。问这堆东西最少有多少个?

翻译成同余就是:

x≡2(mod3),x≡3(mod5),x≡2(mod7)x \equiv 2 \pmod{3}, \quad x \equiv 3 \pmod{5}, \quad x \equiv 2 \pmod{7}x≡2(mod3),x≡3(mod5),x≡2(mod7)

答案是 232323。

你可以真的验一下:232323 除以 333 余 222,除以 555 余 333,除以 777 余 222。这就像三个人分别给你一条线索,每条线索都不完整,但合在一起,居然能把答案锁住。

中国剩余定理(CRT):设 m1,m2,…,mkm_1,m_2,\ldots,m_km1​,m2​,…,mk​ 是两两互质的正整数,令

M=m1m2⋯mkM=m_1m_2\cdots m_kM=m1​m2​⋯mk​

那么对任意整数 a1,a2,…,aka_1,a_2,\ldots,a_ka1​,a2​,…,ak​,方程组

x≡ai(modmi),i=1,2,…,kx \equiv a_i \pmod{m_i}, \quad i=1,2,\ldots,kx≡ai​(modmi​),i=1,2,…,k

在模 MMM 的意义下有唯一解。

这句话可以翻译成人话:

只要这些模数彼此不打架(两两互质),那么每个模数给出的余数条件,最终会拼出一个唯一的答案。这里的“唯一”,不是说只有一个整数,而是说在 000 到 M−1M-1M−1 这个范围里只有一个;之后每隔 MMM,又会重复一次。

怎么拼?方法很机械。

令

Mi=MmiM_i=\frac{M}{m_i}Mi​=mi​M​

然后找 MiM_iMi​ 在模 mim_imi​ 下的逆元 yiy_iyi​,也就是

Miyi≡1(modmi)M_i y_i\equiv 1\pmod {m_i}Mi​yi​≡1(modmi​)

最后把答案合成:

x0=a1M1y1+a2M2y2+⋯+akMkykx_0=a_1M_1y_1+a_2M_2y_2+\cdots+a_kM_ky_kx0​=a1​M1​y1​+a2​M2​y2​+⋯+ak​Mk​yk​

这个公式看起来有点突然,但直觉很好理解:第 iii 项是专门为第 iii 个条件服务的。因为 MiM_iMi​ 除掉了 mim_imi​,却保留了其他所有模数的因子,所以它在其他方程里都会自动变成 000;只在第 iii 个方程里,通过乘上逆元 yiy_iyi​,变成 111。

还是拿孙子那道题走一遍。

这里 m1=3,m2=5,m3=7m_1=3,m_2=5,m_3=7m1​=3,m2​=5,m3​=7,a=(2,3,2)a=(2,3,2)a=(2,3,2)。

总模数:

M=3×5×7=105M=3\times 5\times 7=105M=3×5×7=105

三个分量:

M1=35,M2=21,M3=15M_1=35,\quad M_2=21,\quad M_3=15M1​=35,M2​=21,M3​=15

求逆元:

35≡2(mod3),2×2≡1(mod3)35\equiv 2\pmod 3,\quad 2\times 2\equiv 1\pmod 335≡2(mod3),2×2≡1(mod3)

所以 y1=2y_1=2y1​=2。

21≡1(mod5)21\equiv 1\pmod 521≡1(mod5)

所以 y2=1y_2=1y2​=1。

15≡1(mod7)15\equiv 1\pmod 715≡1(mod7)

所以 y3=1y_3=1y3​=1。

合起来:

x0=2×35×2+3×21×1+2×15×1=233x_0=2\times 35\times 2+3\times 21\times 1+2\times 15\times 1=233x0​=2×35×2+3×21×1+2×15×1=233

233233233 除以 105105105 余 232323,所以

x≡23(mod105)x\equiv 23\pmod {105}x≡23(mod105)

最小正整数解就是 232323。

中国剩余定理真正厉害的地方,不只是会解这类古代趣题。它告诉我们:一个模大数的问题,可以拆成几个模小数的问题;算完以后,再拼回去。这个“拆开算,再合起来”的思想,在计算机算法、编码理论、密码学里都非常常见。


RSA 加密:同余守护你的网络安全

如果前面还像是在做数学题,那么 RSA 就是在告诉你:这些余数游戏真的能保护钱和隐私。

你网购、登录网站、传输敏感信息时,背后经常会用到公钥密码的思想。RSA 是其中最经典的一种。它的核心并不是把算法藏起来,而是反过来:加密方法可以公开,但只有拥有私钥的人才能解开。

RSA 大概是这样玩的。

先选两个非常大的素数 ppp 和 qqq,把它们乘起来:

n=pqn=pqn=pq

nnn 可以公开。别人看到 nnn 没关系。

然后计算

φ(n)=(p−1)(q−1)\varphi(n)=(p-1)(q-1)φ(n)=(p−1)(q−1)

这个值不能随便公开,因为知道它基本就离私钥很近了。

接着选一个和 φ(n)\varphi(n)φ(n) 互质的数 eee,作为公钥指数。再找一个数 ddd,让

ed≡1(modφ(n))ed\equiv 1\pmod{\varphi(n)}ed≡1(modφ(n))

eee 可以公开,ddd 必须保密。

加密时,把明文 MMM 变成密文:

C≡Me(modn)C\equiv M^e\pmod nC≡Me(modn)

解密时,再算:

M′≡Cd(modn)M'\equiv C^d\pmod nM′≡Cd(modn)

在背后的数论保证下,M′M'M′ 会回到原来的 MMM。

这个系统为什么安全?一句话:乘两个大素数很容易,但把它们的乘积再拆回去很难。

比如你知道 n=pqn=pqn=pq,但不知道 ppp 和 qqq。如果 p,qp,qp,q 足够大,想从 nnn 反推出这两个素数,成本会高到不现实。没有 p,qp,qp,q,就很难得到 φ(n)\varphi(n)φ(n);没有 φ(n)\varphi(n)φ(n),就很难得到私钥 ddd。

同余在这里扮演了很关键的角色:它让加密和解密都可以写成模幂运算。费马小定理和它的推广(欧拉定理)保证了这些运算能正确绕回来。中国剩余定理还常被用来加速 RSA 解密,把一个大模数上的计算拆成两个小模数上的计算,再合并结果。

所以你可以这样理解:RSA 不是靠“别人不知道规则”来安全,而是靠“别人知道规则也算不回来”来安全。


日历里的同余

同余最日常的例子,其实每天都在我们手机日历里。

星期就是模 777。今天星期三,100100100 天后星期几?因为

100=14×7+2100=14\times 7+2100=14×7+2

所以只需要往后数 222 天,是星期五。

如果某年 111 月 111 日是星期二,问非闰年的 333 月 111 日是星期几?从 111 月 111 日到 333 月 111 日,过了

31+28=5931+28=5931+28=59

天。59=8×7+359=8\times 7+359=8×7+3,所以从星期二往后推 333 天,是星期五。

闰年规则也可以用同余讲清楚:

公历闰年规则:年份 yyy 是闰年,当且仅当

  1. yyy 能被 444 整除,但不能被 100100100 整除;或
  2. yyy 能被 400400400 整除。

比如 202420242024 能被 444 整除,不能被 100100100 整除,所以是闰年。

210021002100 虽然能被 444 整除,但也能被 100100100 整除,不能被 400400400 整除,所以不是闰年。

200020002000 能被 400400400 整除,所以是闰年。

你看,日历本质上就是很多周期叠在一起:一周 777 天,普通年份 365365365 天,闰年 366366366 天,闰年规则又按 4,100,4004,100,4004,100,400 年循环。所谓算星期几,就是在这些周期里不断取余。


例题精讲

例题一:费马小定理计算大幂次

题目:计算 2100 mod 132^{100} \bmod 132100mod13。

先看能不能用费马小定理。131313 是素数,且 13∤213\nmid 213∤2,所以

212≡1(mod13)2^{12}\equiv 1\pmod {13}212≡1(mod13)

也就是说,指数每 121212 个一轮。

把 100100100 除以 121212:

100=12×8+4100=12\times 8+4100=12×8+4

所以

2100=(212)8⋅24≡18⋅16(mod13)2^{100}=(2^{12})^8\cdot 2^4\equiv 1^8\cdot 16\pmod {13}2100=(212)8⋅24≡18⋅16(mod13)

161616 除以 131313 余 333,所以

2100 mod 13=32^{100}\bmod 13=32100mod13=3

这题的关键不是硬算 21002^{100}2100,而是先把指数变小。□\square□

例题二:威尔逊定理推导阶乘余数

题目:计算 11! mod 1311! \bmod 1311!mod13。

131313 是素数,所以威尔逊定理给出:

12!≡−1≡12(mod13)12!\equiv -1\equiv 12\pmod {13}12!≡−1≡12(mod13)

而

12!=12×11!12!=12\times 11!12!=12×11!

所以

12×11!≡12(mod13)12\times 11!\equiv 12\pmod {13}12×11!≡12(mod13)

因为 12≡−1(mod13)12\equiv -1\pmod {13}12≡−1(mod13),它的逆元还是 121212。两边乘以 121212:

11!≡12×12=144≡1(mod13)11!\equiv 12\times 12=144\equiv 1\pmod {13}11!≡12×12=144≡1(mod13)

所以答案是 111。□\square□

例题三:中国剩余定理的完整流程

题目:求满足 x≡1(mod2)x \equiv 1 \pmod 2x≡1(mod2),x≡2(mod3)x \equiv 2 \pmod 3x≡2(mod3),x≡3(mod5)x \equiv 3 \pmod 5x≡3(mod5) 的最小正整数 xxx。

先确认模数两两互质:

gcd⁡(2,3)=gcd⁡(3,5)=gcd⁡(2,5)=1\gcd(2,3)=\gcd(3,5)=\gcd(2,5)=1gcd(2,3)=gcd(3,5)=gcd(2,5)=1

所以可以用中国剩余定理。总模数

M=2×3×5=30M=2\times 3\times 5=30M=2×3×5=30

三个分量是

M1=15,M2=10,M3=6M_1=15,\quad M_2=10,\quad M_3=6M1​=15,M2​=10,M3​=6

分别求逆元:

15≡1(mod2),y1=115\equiv 1\pmod 2,\quad y_1=115≡1(mod2),y1​=1

10≡1(mod3),y2=110\equiv 1\pmod 3,\quad y_2=110≡1(mod3),y2​=1

6≡1(mod5),y3=16\equiv 1\pmod 5,\quad y_3=16≡1(mod5),y3​=1

这道题很友好,三个逆元刚好都是 111。

代入合成公式:

x0=1×15×1+2×10×1+3×6×1=53x_0=1\times 15\times 1+2\times 10\times 1+3\times 6\times 1=53x0​=1×15×1+2×10×1+3×6×1=53

535353 除以 303030 余 232323,所以

x≡23(mod30)x\equiv 23\pmod {30}x≡23(mod30)

最小正整数解是 232323。验一下:232323 除以 222 余 111,除以 333 余 222,除以 555 余 333。□\square□

例题四:日历计算

题目:已知 202420242024 年 111 月 111 日是星期一,问 202420242024 年 777 月 444 日是星期几?

先判断 202420242024 年是不是闰年。202420242024 能被 444 整除,不能被 100100100 整除,所以它是闰年,222 月有 292929 天。

从 111 月 111 日到 777 月 444 日,经过的天数是:

31+29+31+30+31+30+3=18531+29+31+30+31+30+3=18531+29+31+30+31+30+3=185

这里最后的 333,是从 777 月 111 日走到 777 月 444 日。

把 185185185 对 777 取余:

185=26×7+3185=26\times 7+3185=26×7+3

所以从星期一往后推 333 天,是星期四。答案:202420242024 年 777 月 444 日是星期四。□\square□

例题五:模意义下的“除法”

题目:在模 171717 意义下,求 5/95/95/9 的值,也就是 5×9−1(mod17)5 \times 9^{-1} \pmod{17}5×9−1(mod17)。

先找 999 在模 171717 下的逆元。直接试也行:9×2=18≡1(mod17)9\times 2=18\equiv 1\pmod {17}9×2=18≡1(mod17),所以

9−1≡2(mod17)9^{-1}\equiv 2\pmod {17}9−1≡2(mod17)

于是

5/9≡5×2=10(mod17)5/9\equiv 5\times 2=10\pmod {17}5/9≡5×2=10(mod17)

验算一下:

9×10=90≡5(mod17)9\times 10=90\equiv 5\pmod {17}9×10=90≡5(mod17)

说明 101010 的确就是模 171717 意义下的 5/95/95/9。□\square□

中国剩余定理示意图:以孙子算经题目为例,三个同心圆外环分别标注mod3(红色)、mod5(蓝色)、mod7(绿色),内部圆盘旋转到使三条颜色箭头分别对准余数2、3、2的刻度,交汇点指向23,说明三个独立余数条件唯一确定了mod 105范围内的数


练习

练习一:利用费马小定理,计算 5999 mod 115^{999} \bmod 115999mod11,以及 7200 mod 137^{200} \bmod 137200mod13。

5999 mod 115^{999} \bmod 115999mod11:

111111 是素数,所以 510≡1(mod11)5^{10}\equiv 1\pmod {11}510≡1(mod11)。

999=10×99+9999=10\times 99+9999=10×99+9,因此

5999≡59(mod11)5^{999}\equiv 5^9\pmod {11}5999≡59(mod11)

继续算:

52=25≡3(mod11)5^2=25\equiv 3\pmod {11}52=25≡3(mod11)

54≡32=9(mod11)5^4\equiv 3^2=9\pmod {11}54≡32=9(mod11)

58≡92=81≡4(mod11)5^8\equiv 9^2=81\equiv 4\pmod {11}58≡92=81≡4(mod11)

所以

59≡58⋅5≡4×5=20≡9(mod11)5^9\equiv 5^8\cdot 5\equiv 4\times 5=20\equiv 9\pmod {11}59≡58⋅5≡4×5=20≡9(mod11)

答案是 999。

7200 mod 137^{200} \bmod 137200mod13:

131313 是素数,所以 712≡1(mod13)7^{12}\equiv 1\pmod {13}712≡1(mod13)。

200=12×16+8200=12\times 16+8200=12×16+8,因此

7200≡78(mod13)7^{200}\equiv 7^8\pmod {13}7200≡78(mod13)

计算:

72=49≡10(mod13)7^2=49\equiv 10\pmod {13}72=49≡10(mod13)

74≡102=100≡9(mod13)7^4\equiv 10^2=100\equiv 9\pmod {13}74≡102=100≡9(mod13)

78≡92=81≡3(mod13)7^8\equiv 9^2=81\equiv 3\pmod {13}78≡92=81≡3(mod13)

答案是 333。

练习二:用中国剩余定理解方程组 x≡3(mod4)x \equiv 3 \pmod 4x≡3(mod4),x≡2(mod7)x \equiv 2 \pmod 7x≡2(mod7),x≡4(mod9)x \equiv 4 \pmod 9x≡4(mod9),求最小正整数解。

三个模数两两互质,所以可以用中国剩余定理。

总模数:

M=4×7×9=252M=4\times 7\times 9=252M=4×7×9=252

三个分量:

M1=63,M2=36,M3=28M_1=63,\quad M_2=36,\quad M_3=28M1​=63,M2​=36,M3​=28

求逆元:

63≡3(mod4),3×3≡1(mod4)63\equiv 3\pmod 4,\quad 3\times 3\equiv 1\pmod 463≡3(mod4),3×3≡1(mod4)

所以 y1=3y_1=3y1​=3。

36≡1(mod7)36\equiv 1\pmod 736≡1(mod7)

所以 y2=1y_2=1y2​=1。

28≡1(mod9)28\equiv 1\pmod 928≡1(mod9)

所以 y3=1y_3=1y3​=1。

合成:

x0=3×63×3+2×36×1+4×28×1=751x_0=3\times 63\times 3+2\times 36\times 1+4\times 28\times 1=751x0​=3×63×3+2×36×1+4×28×1=751

751751751 除以 252252252 余 247247247,所以

x≡247(mod252)x\equiv 247\pmod {252}x≡247(mod252)

最小正整数解是 247247247。

练习三:利用威尔逊定理,证明对素数 p≥3p \geq 3p≥3,

(p−12)!2≡(−1)(p+1)/2(modp)\left(\dfrac{p-1}{2}\right)!^2 \equiv (-1)^{(p+1)/2} \pmod p(2p−1​)!2≡(−1)(p+1)/2(modp)

提示:把 (p−1)!(p-1)!(p−1)! 分成前半段和后半段,再把后半段改写成负数。

把 (p−1)!(p-1)!(p−1)! 拆成两半:

(p−1)!=(1⋅2⋯p−12)(p+12⋅p+32⋯(p−1))(p-1)! = \left(1\cdot 2\cdots \frac{p-1}{2}\right) \left(\frac{p+1}{2}\cdot \frac{p+3}{2}\cdots (p-1)\right)(p−1)!=(1⋅2⋯2p−1​)(2p+1​⋅2p+3​⋯(p−1))

后半段里的数可以这样看:

p−k≡−k(modp)p-k\equiv -k\pmod pp−k≡−k(modp)

所以

(p−1)(p−2)⋯p+12≡(−1)(p−1)/2(p−12)!(modp)(p-1)(p-2)\cdots \frac{p+1}{2} \equiv (-1)^{(p-1)/2}\left(\frac{p-1}{2}\right)! \pmod p(p−1)(p−2)⋯2p+1​≡(−1)(p−1)/2(2p−1​)!(modp)

于是

(p−1)!≡(−1)(p−1)/2[(p−12)!]2(modp)(p-1)! \equiv (-1)^{(p-1)/2} \left[\left(\frac{p-1}{2}\right)!\right]^2 \pmod p(p−1)!≡(−1)(p−1)/2[(2p−1​)!]2(modp)

根据威尔逊定理,(p−1)!≡−1(modp)(p-1)!\equiv -1\pmod p(p−1)!≡−1(modp),所以

(−1)(p−1)/2[(p−12)!]2≡−1(modp)(-1)^{(p-1)/2} \left[\left(\frac{p-1}{2}\right)!\right]^2 \equiv -1\pmod p(−1)(p−1)/2[(2p−1​)!]2≡−1(modp)

两边同乘 (−1)(p−1)/2(-1)^{(p-1)/2}(−1)(p−1)/2,得到

[(p−12)!]2≡(−1)(p+1)/2(modp)\left[\left(\frac{p-1}{2}\right)!\right]^2 \equiv (-1)^{(p+1)/2} \pmod p[(2p−1​)!]2≡(−1)(p+1)/2(modp)

证毕。□\square□


要点收束

如果用一句话来结尾这一部分:同余让我们不用关心一个数“到底有多大”,只关心它落在某个周期里的哪个位置。

费马小定理告诉我们,在素数模数下,幂次会出现稳定周期,所以大幂次可以变小,逆元也可以靠幂来求。

威尔逊定理告诉我们,素数还可以被阶乘刻画:(p−1)!(p-1)!(p−1)! 在模 ppp 下刚好等于 −1-1−1。它背后的直觉是逆元配对,最后只剩 111 和 p−1p-1p−1。

中国剩余定理告诉我们,只要模数两两互质,几个余数条件可以拼成一个完整答案。它是“拆开算,再合起来”的典型代表。

最后,RSA 和日历分别展示了同余的两个极端:一个在保护网络通信,一个在回答今天之后多少天是星期几。一个听起来高深,一个每天都用得上。但底层问题其实都是同一个:除完以后,余几?

  • 费马小定理
  • 威尔逊定理
  • 中国剩余定理
  • RSA 加密:同余守护你的网络安全
  • 日历里的同余
  • 例题精讲
    • 例题一:费马小定理计算大幂次
    • 例题二:威尔逊定理推导阶乘余数
    • 例题三:中国剩余定理的完整流程
    • 例题四:日历计算
    • 例题五:模意义下的“除法”
  • 练习
  • 要点收束

目录

  • 费马小定理
  • 威尔逊定理
  • 中国剩余定理
  • RSA 加密:同余守护你的网络安全
  • 日历里的同余
  • 例题精讲
    • 例题一:费马小定理计算大幂次
    • 例题二:威尔逊定理推导阶乘余数
    • 例题三:中国剩余定理的完整流程
    • 例题四:日历计算
    • 例题五:模意义下的“除法”
  • 练习
  • 要点收束