跳至主要内容
← 数学

数论 ⋅\cdot 整数与证明

同余

假设我们有 17 个小圆片,每 5 个装一包。3 个完整的包用掉 15 个,还剩 2 个。如果换成 22 个圆片,4 个完整的包用掉 20 个,也还剩 2 个。总数不同,可是如果我们只问“最后剩几个”,这两个总数给出的答案就一样。

我们能不能只保留这一小部分信息,不先算出很大的总数?例如,把 7 连乘 2026 次,末位到底是什么?在这个页面里,我们会从这些小包开始,把允许进行的每一步运算解释清楚,再用它找全答案,或者证明答案根本不存在。

开头只需要普通的加、减、乘。整数的记号、带余除法和证明工具,都会在用到的位置解释。图片帮助我们检查具体例子,而涉及所有整数的结论,仍然要靠完整的推理。

01

分完相同大小的组,我们留下什么?

我们先留在 17 个圆片、每包 5 个的例子里。下面每个蓝色实线框装了 5 个圆片,金色虚线框里只有剩下的 2 个;它还不是一个完整的 5 个一包。

5
5
5
2
17=3×5+2,22=4×5+217=3\times5+2,\qquad 22=4\times5+2

5 告诉我们一整组有多大,在除法里它叫除数。3 或 4 数的是完整的组数,叫商。最后留下的 2 叫余数。余数必须不小于 0,而且小于每组大小。如果还剩至少 5 个,我们就还能装满一包,也就是说分组还没有完成。

为了让一句话同时描述不同的总数,我们用字母。aa 是一个整数,也就是 …,−3-3,−2-2,−1-1,0,1,2,3,… 这些没有小数或分数部分的数。a∈Za \in \mathbb Z 的意思就是“aa 是整数”。mm 是固定的正整数分组大小,这里至少是 2。qq 是整数商,rr 是余数:

a=qm+r,q∈Z,0≤r<ma=qm+r,\qquad q\in\mathbb Z,\qquad 0\le r<m

qmqm 中两个字母挨着写表示相乘,也就是 q×mq \times m。负数不能直接当作实际圆片的包数,不过数轴让同一个等式继续成立:从一个不超过 aa 的倍数 qmqm 出发,向右走 rr 个单位,就到达 aa。例如 −1=(−1)×5+4-1 = (-1) \times 5 + 4,表示从 −5-5 向右走 4 个单位到 −1-1。商是 −1-1,可余数是 4,并不是 −1-1。

把整数分组,查看剩下的余数

金色点是 aa,蓝色标记是 mm 的倍数,小刻度之间相差 1。画面会跟着 aa 显示一段数轴,所以 0 不一定在画面里。改变 aa 或 mm,然后按“下一步”;阅读时画面不会自行前进。

17
5

第 1 步,共 3 步 — 先在这段数轴上找到 aa。

单位刻度、选定整数和余数距离1015172025a = 17

我们选了 a=17a = 17,m=5m = 5。

02

为什么余数一定存在,而且只有一个?

图片替几个整数找到了余数。不过要在这个基础上建立规则,我们还需要两件事:每个整数都能这样写,而且不能同时有两个不同的正确余数。我们分开证明。

先证明每个整数都写得出来

如果 aa 不小于 0,我们从 aa 开始,只要剩下的数至少是 mm,就减去一个 mm。每次减法拿走一整组。剩下的数每次至少减少 1,而且不会变成负数,所以一定会停下:从 0 到 aa 总共只有 a+1a + 1 个非负整数。如果一共减了 qq 次,最后的数叫 rr,那么 a=qm+ra = qm + r,而且 0≤r<m0 \le r < m。

如果 aa 是负数,我们写 a=−na = -n,其中 nn 是正数。对 nn 使用刚才的分组方法,得到 n=qm+rn = qm + r。如果 r=0r = 0,等式两边变号就得到 a=(−q)m+0a = (-q)m + 0。如果 r>0r > 0,变号后的式子是 −qm−r-qm - r,但这里的 −r-r 是负数。为了得到非负余数,我们从完整倍数中减去一个 mm,并把同样的 mm 补到余数部分:

a=−qm−r=(−q−1)m+(m−r)a=-qm-r=(-q-1)m+(m-r)

右边展开是 −qm−m+m−r=−qm−r-qm - m + m - r = -qm - r,所以数值没有改变。又因为 0<r<m0 < r < m,mm 减去 rr 后满足 0<m−r<m0 < m - r < m,新余数符合要求。这两种情况包括所有负整数,因此存在性已经证明。

再排除两个不同的答案

假设有人给出了两种写法 a=qm+ra = qm + r、a=sm+ta = sm + t,其中 rr、tt 都在 0 到 m−1m - 1 之间。用第一种写法减去第二种,因为描述的是同一个 aa,左边就抵消了:

0=qm+r−sm−t=m(q−s)+(r−t)m(q−s)=t−r\begin{aligned}0&=qm+r-sm-t\\&=m(q-s)+(r-t)\\m(q-s)&=t-r\end{aligned}

rr、tt 都在这个范围里,所以 t−rt - r 严格处在 −m-m 与 mm 之间。可是一个整数倍的 mm,要么是 0,要么大小至少是 mm,因为非零整数的大小至少是 1。因此这里的倍数只能是 0。于是 q−s=0q - s = 0,也就是 q=sq = s;接着 t−r=0t - r = 0,也就是 t=rt = r。商和符合范围要求的余数都只有一个。

0≤r<m0 \le r < m 这个范围很重要。去掉它,17=3×5+217 = 3 \times 5 + 2 和 17=2×5+717 = 2 \times 5 + 7 都能描述同一个数。第二个等式没有算错,但 7 不符合除以 5 的余数要求。

03

把“余数相同”写得准确

回到 17 和 22。它们的差是 22−17=522 - 17 = 5,正好是一整包。添加或拿走完整的包会改变总数,却不改变余数。我们需要一个记号来描述这种准确的相同:a≡b(modm)a \equiv b \pmod{m},读作“aa 与 bb 模 mm 同余”,意思是它们除以 mm 的余数相同。固定的 mm 叫模数。

17≡22(mod5)−1≡4(mod5)\begin{gathered}17\equiv22\pmod5\\-1\equiv4\pmod5\end{gathered}

余数相同的所有整数合在一起,叫一个余数类。我们可以拿其中任何一个数来代表这一整类,这个数就叫代表元。例如模 5 时,2 所在的类包含 …,−8-8,−3-3,2,7,12,17,22,…,因为每一个都等于 5 乘以某个整数再加 2。用 2 作代表,并不意味着这一类只有整数 2。

这里的 ≡\equiv 不表示两个整数相等,也不表示大约相等。它准确地说的是:在指定模数下,余数相同。推理时不能忘掉模数:17 和 22 模 5 同余,可是除以 3 时,它们的余数分别是 2 和 1。

还有一种说法更方便计算。记号 m∣nm \mid n 表示“mm 整除 nn”,也就是 nn 等于 mm 乘以某个整数;中间的竖线不是除号。我们现在从两个方向证明:余数相同,恰好等价于两数的差是 mm 的倍数。

a≡b(modm)⇕m∣(a−b)⇕a−b=mk(k∈Z)\begin{gathered}a\equiv b\pmod m\\\Updownarrow\\m\mid(a-b)\\\Updownarrow\\a-b=mk\quad(k\in\mathbb Z)\end{gathered}

先假设余数相同。写成 a=qm+ra = qm + r、b=sm+rb = sm + r。相减得到 a−b=qm+r−sm−r=m(q−s)a - b = qm + r - sm - r = m(q - s)。q−sq - s 仍是整数,所以这个差是 mm 的整数倍。

反过来,假设 a−b=mka - b = mk,其中 kk 是整数。先不假设余数相同,分别写 a=qm+ra = qm + r、b=sm+tb = sm + t。代入,再把已经是 mm 的倍数的部分移到另一边:

mk=m(q−s)+(r−t)r−t=m(k−q+s)\begin{aligned}mk&=m(q-s)+(r-t)\\r-t&=m(k-q+s)\end{aligned}

r−tr - t 又严格处在 −m-m 与 mm 之间,同时它又是 mm 的倍数。刚才唯一性证明里的理由迫使它只能为 0,所以 r=tr = t。两个方向都证明了。双向箭头的意思就是:任意一边成立,都能推出另一边成立。

接下来会用到的三个小动作,也能直接解释。每个数与自己同余,因为 a−a=m×0a - a = m \times 0。同余两边可以交换,因为 a−b=mka - b = mk 就意味着 b−a=m(−k)b - a = m(-k)。同一个模数下还可以把两段关系接起来:如果 a−b=mka - b = mk、b−c=mhb - c = mh,相加得到 a−c=m(k+h)a - c = m(k + h)。所以 aa 与 bb 同余、bb 与 cc 同余,就能推出 aa 与 cc 同余;模数始终必须相同。

04

哪些运算保留这种关系?

如果我们只知道余数,还能加或乘吗?设 a≡b(modm)a \equiv b \pmod{m}、c≡d(modm)c \equiv d \pmod{m}。刚才证明的差的说法让我们可以写 a=b+mka = b + mk、c=d+mhc = d + mh,其中 kk、hh 是整数。这两个等式准确地告诉我们省略了什么:若干个完整的 mm。

加法与减法

(a+c)−(b+d)=(b+mk+d+mh)−(b+d)=mk+mh=m(k+h)(a−c)−(b−d)=(b+mk−d−mh)−(b−d)=mk−mh=m(k−h)\begin{aligned}&(a+c)-(b+d)\\&=(b+mk+d+mh)-(b+d)\\&=mk+mh\\&=m(k+h)\\[6pt]&(a-c)-(b-d)\\&=(b+mk-d-mh)-(b-d)\\&=mk-mh\\&=m(k-h)\end{aligned}

k+hk + h 和 k−hk - h 都是整数,因此两行算出的差都是 mm 的倍数。根据已经证明的描述,a+c≡b+d(modm)a + c \equiv b + d \pmod{m},a−c≡b−d(modm)a - c \equiv b - d \pmod{m}。特别地,两边加上同一个整数是允许的,因为这个整数总与自己同余。

乘法

乘法里,我们必须把每一项都算进去,包括两个被省略的倍数之间的乘积。展开括号后,所有含 mm 的项都可以合成一个 mm 的倍数:

ac=(b+mk)(d+mh)=bd+bmh+dmk+m2kh=bd+m(bh+dk+mkh),ac−bd=m(bh+dk+mkh).\begin{aligned}ac&=(b+mk)(d+mh)\\&=bd+bmh+dmk+m^2kh\\&=bd+m(bh+dk+mkh),\\ac-bd&=m(bh+dk+mkh).\end{aligned}

括号里只有整数的和与积,所以它还是整数。因此 ac≡bd(modm)ac \equiv bd \pmod{m}。这就是为什么我们能先把因数换成余数。例如模 5 下,17=3×5+217 = 3 \times 5 + 2,所以 17≡217 \equiv 2;22=4×5+222 = 4 \times 5 + 2,所以 22≡222 \equiv 2。于是 17×22≡2×2=4(mod5)17 \times 22 \equiv 2 \times 2 = 4 \pmod{5}。算完整乘积检查,374=74×5+4374 = 74 \times 5 + 4。更小的计算准确保留了我们要的余数。

正整数次幂

ana^{n} 中的 nn 是正整数时,意思是把 nn 个 aa 乘起来。如果 aa 与 bb 同余,乘法规则先给出 a2a^{2} 与 b2b^{2} 同余。再把 a2≡b2a^{2} \equiv b^{2} 和 a≡ba \equiv b 相乘,就得到 a3≡b3a^{3} \equiv b^{3}。为什么这不只是两个例子,而能包括每个正整数 nn?起点 n=1n = 1 就是已知的同余。只要 nn 这一步成立,把它再与 a≡ba \equiv b 相乘,就证明 n+1n + 1 这一步成立。从 1 开始不断这样前进,就能到达任意正整数 nn。这种“起点成立,而且每一步能推到下一步”的证明叫归纳证明。

a≡b(modm)⟹an≡bn(modm)n=1,2,3,…\begin{gathered}a\equiv b\pmod m\\\Longrightarrow a^n\equiv b^n\pmod m\\n=1,2,3,\ldots\end{gathered}

我们已经证明了加法、减法、乘法的规则,所以也证明了正整数次幂的规则。我们还没有证明可以任意除法。不能因为其他运算成立,就把除法也自动放进这个名单。

05

为什么直接约分会漏掉答案?

看 2x≡2(mod6)2x \equiv 2 \pmod{6}。普通等式 2x=22x = 2 只有 x=1x = 1。可现在的要求不同:我们要的是 2x−22x - 2 为 6 的倍数。x=1x = 1 和 x=4x = 4 都成立,因为 2×1−2=0=6×02 \times 1 - 2 = 0 = 6 \times 0,而 2×4−2=6=6×12 \times 4 - 2 = 6 = 6 \times 1。可是 1 和 4 并不模 6 同余,因为 4−1=34 - 1 = 3 不是 6 的倍数。

乘法会把不同余数组合到一起吗?

第一列列出 xx 所有可能的余数,第二列把它乘以 cc,第三列只保留除以 mm 的余数。金色行和选定的 xx 到达同一个结果。保持 mm 不变,改变 cc,观察哪些不同的行会合到一起。

6
2
1

图中左列是起始余数,右列是结果余数。每条线都执行“乘以 cc,再保留余数”。金色线落在右边同一个点上;下面的表格则写出每条线背后的准确计算。

突出显示相同结果的乘法对应图起始 x结果余数001122334455
xxc×xc \times x除以 mm 的余数
02×0=02\times 0= 00
1 ← 选定2×1=22\times 1= 22
22×2=42\times 2= 44
32×3=62\times 3= 60
42×4=82\times 4= 82
52×5=102\times 5= 104

2×1=0×6+22\times 1= 0\times 6+ 2

得到同一个结果的起始余数:1, 4.

初始表格里,起始余数 1 和 4 乘以 2 后,模 6 都变成 2。两个起点合在一起之后,仅凭结果就无法分辨我们来自哪个起点。没有理由的约分,丢掉的正是这部分信息。

真正的等式仍然可以做除法。我们把条件写成 2x−2=6k2x - 2 = 6k,其中 kk 是整数。这个等式的每一项都除以 2,得到 x−1=3kx - 1 = 3k。它说的是 x≡1(mod3)x \equiv 1 \pmod{3},模数已经变成 3。把步骤倒过来,任何这样写出的 xx 都成立。因此全部整数解是 x=1+3kx = 1 + 3k,也就是 …,−5-5,−2-2,1,4,7,10,…。消去因数时,模数也跟着改变了。

什么时候能保留原来的模数?不能保留时,到底应该怎么改?要完整回答,我们需要一个工具:用整数倍组合出 1,或者组合出更大的公因数。接下来我们把这个工具证明出来,而不是直接假设它存在。

06

找到我们需要的整数倍组合

取正整数 AA、MM。一个正整数如果同时整除它们,就是正公因数。至少总有 1,而且这样的数只有有限个:若 A=ghA = gh,gg、hh 都是正整数,那么 h≥1h \ge 1,所以 g≤Ag \le A。因此每个正因数都在 1,2,…,AA 这个有限列表里。其中最大的叫最大公因数,记作 gcd⁡(A,M)\gcd (A, M)。我们不仅要找到它,还要证明它能写成整数倍的组合 uA+vMuA + vM。

换一对数,同时保留全部公因数

把 AA 除以 MM,写 A=qM+rA = qM + r。如果正整数 gg 同时整除 AA、MM,就能写 A=guA = gu、M=gvM = gv。那么 r=A−qM=gu−qgv=g(u−qv)r = A - qM = gu - qgv = g(u - qv),所以 gg 也整除 rr。反过来,如果 M=gvM = gv、r=gwr = gw,那么 A=qM+r=qgv+gw=g(qv+w)A = qM + r = qgv + gw = g(qv + w),所以 gg 也整除 AA。因此 (A,M)(A, M) 与 (M,r)(M, r) 这两对数拥有完全相同的正公因数。

只要余数不为 0,就继续这样替换。每个新余数都是非负整数,而且比前一个除数小,所以正余数不可能永远下降。最终会到达 (d,0)(d, 0)。dd 的每个正因数也都整除 0,因为 0 等于这个因数乘以 0;所以最后一对数的最大公因数就是 dd 本身。每次替换都保留了全部公因数,因此 dd 也是最初 AA、MM 的最大公因数。这个过程叫辗转相除法,也叫欧几里得算法。

把每个余数是怎么来的也留下

最开始,A=1A+0MA = 1A + 0M、M=0A+1MM = 0A + 1M 已经是 AA、MM 的整数倍组合。假设当前两个数写成 uA+vMuA + vM、sA+tMsA + tM。用第一个数减去第二个数的 qq 倍,就得到 (u−qs)A+(v−qt)M(u - qs)A + (v - qt)M,系数仍然是整数。因此每个新余数也是这样的组合。起点成立,每一步都保留这个性质,所以最后留下的非零数 dd 也一定能这样写,即使它本来就是起始数之一:

d=gcd⁡(A,M)=uA+vM,u,v∈Zd=\gcd(A,M)=uA+vM,\qquad u,v\in\mathbb Z

这个等式叫贝祖等式。uu、vv 可以是负数;“整数倍组合”既允许加,也允许减。我们已经证明了这些系数一定存在,并不是假设我们总能猜到它们。

把数算完整:用 7 和 12 组合出 1

对于 7 和 12,先用较大的数除以较小的数。随后每一行都取上一行的除数和余数:

12=1×7+5,7=1×5+2,5=2×2+1,2=2×1+0.\begin{aligned}12&=1\times7+5,\\7&=1\times5+2,\\5&=2\times2+1,\\2&=2\times1+0.\end{aligned}

最后一个非零余数是 1,所以 gcd⁡(7,12)=1\gcd (7, 12) = 1。怎样用最初的 7 和 12 写出这个 1?等式 1=5−2×21 = 5 - 2 \times 2 告诉我们它来自哪里。其中的 2 可以换成 7−57 - 5,剩下的 5 可以换成 12−712 - 7,这样式子里就只留下 7 和 12。中间的展开也全部保留:

1=5−2×2=5−2(7−5)=5−2×7+2×5=3×5−2×7=3(12−7)−2×7=3×12−3×7−2×7=3×12−5×7.\begin{aligned}1&=5-2\times2\\&=5-2(7-5)\\&=5-2\times7+2\times5\\&=3\times5-2\times7\\&=3(12-7)-2\times7\\&=3\times12-3\times7-2\times7\\&=3\times12-5\times7.\end{aligned}

检查一下,36−35=136 - 35 = 1。这里没有除以 7;我们找到的是 7 的一个整数乘数 −5-5,使乘积与 1 相差一个 12 的倍数。这正是我们在寻找的、能够代替除法的办法。

07

正确地消去,再认识逆元

先处理乘数 cc 与模数 mm 的最大公因数为 1 的情况。这样的两个正整数叫互质,意思只是它们唯一的正公因数是 1。贝祖等式给出整数 uu、vv,使 uc+vm=1uc + vm = 1。假设 cA≡cB(modm)cA \equiv cB \pmod{m},也就是 c(A−B)=mkc(A - B) = mk。现在把贝祖等式乘以 A−BA - B:

A−B=(uc+vm)(A−B)=u c(A−B)+vm(A−B)=u mk+vm(A−B)=m(uk+v(A−B)).\begin{aligned}A-B&=(uc+vm)(A-B)\\&=u\,c(A-B)+vm(A-B)\\&=u\,mk+vm(A-B)\\&=m\bigl(uk+v(A-B)\bigr).\end{aligned}

括号里是整数,所以 mm 整除 A−BA - B,也就是 A≡B(modm)A \equiv B \pmod{m}。我们选贝祖等式,是为了让一边变成 A−BA - B,另一边又能用上已经知道是 mm 的倍数的 c(A−B)c(A - B)。这样就证明了:乘数与模数互质时,可以保留模数消去乘数。

有公因数时,到底改变什么?

设 d=gcd⁡(c,m)d = \gcd (c, m),这里 cc 是正整数。把两者都除以 dd,记 c′=c/dc' = c/d、m′=m/dm' = m/d,它们仍然是整数。它们互质:如果正整数 hh 同时整除 c′c'、m′m',那么 dhdh 就同时整除 cc、mm;由于 dd 已是最大公因数,dh≤ddh \le d,两边除以正数 dd 得到 h≤1h \le 1。因此 hh 只能是 1。

d=gcd⁡(c,m)cA≡cB(modm)⇕A≡B(modm/d)\begin{gathered}d=\gcd(c,m)\\cA\equiv cB\pmod m\\\Updownarrow\\A\equiv B\pmod{m/d}\end{gathered}

先证明向右的方向。写 c(A−B)=mkc(A - B) = mk,把这个等式除以 dd,得到 c′(A−B)=m′kc'(A - B) = m'k。c′c'、m′m' 互质,刚才的证明就给出 m′m' 整除 A−BA - B。反过来,如果 A−B=m′jA - B = m'j,其中 jj 是整数,乘以 c=dc′c = dc' 后得到 c(A−B)=dc′m′j=mc′jc(A - B) = dc'm'j = mc'j,它是 mm 的倍数,因此原同余成立。两个方向都成立。

还有一个边界情况需要说清楚。如果 m/d=1m/d = 1,那么除以 1 的余数总是 0,因为每个整数 nn 都有 n=n×1+0n = n \times 1 + 0。因此所有整数模 1 都同余,化简后的条件没有施加任何限制。刚才的证明仍然成立,因为 1 整除所有整数。起初我们用 m≥2m \ge 2,但消去之后可能出现这个情况。

用另一次乘法撤销乘法

普通算术里,乘以 1/c1/c 能撤销乘以 cc。在这里,我们要找的是整数 uu,使 cu≡1(modm)cu \equiv 1 \pmod{m}。这样的 uu 叫 cc 模 mm 的乘法逆元。它是在余数关系里起逆作用的整数,并不是普通分数 1/c1/c。如果 cx≡bcx \equiv b,两边乘以 uu 得到 ucx≡ubucx \equiv ub;再用 uc≡1uc \equiv 1 和乘法规则,就得到 x≡ubx \equiv ub。

逆元存在的条件恰好是 gcd⁡(c,m)=1\gcd (c, m) = 1。如果最大公因数是 1,贝祖等式给出 uc+vm=1uc + vm = 1,因此 uc−1=−vmuc - 1 = -vm,证明了 uc≡1uc \equiv 1。反过来,如果 uc≡1uc \equiv 1,就有 uc−1=mkuc - 1 = mk,也就是 1=uc−mk1 = uc - mk。cc、mm 的每个正公因数都要整除这个组合,所以都要整除 1。如果 1=gh1 = gh,gg、hh 都是正整数,h≥1h \ge 1 就迫使 g≤1g \le 1,因此 1 的正因数只有 1,最大公因数就是 1。存在的条件和必要性都证明了。

刚才的 1=3×12−5×71 = 3 \times 12 - 5 \times 7 说明,−5-5 是 7 模 12 的一个逆元。加上 12,可以换成代表元 7。检查一下,7×7=49=4×12+17 \times 7 = 49 = 4 \times 12 + 1。逆元不是唯一的整数,因为加上模数的倍数还能成立,但它的余数只有一个。理由是:如果 cu≡cv≡1cu \equiv cv \equiv 1,而且 gcd⁡(c,m)=1\gcd (c, m) = 1,刚才证明的消去规则就给出 u≡v(modm)u \equiv v \pmod{m}。

08

找出一次同余方程的全部解

现在我们可以解 ax≡b(modm)ax \equiv b \pmod{m}:aa 是正整数,bb 是任意整数,m≥2m \ge 2,xx 是待求整数。“一次”说的是 xx 只乘上一个系数 aa,没有平方或更高次幂。我们要回答三个问题:有没有解?怎么找出一个?又怎么知道已经找全?

先判断能不能有解

记 d=gcd⁡(a,m)d = \gcd (a, m)。如果 xx 是解,就有整数 kk 使 ax−b=mkax - b = mk。移项得到 b=ax−mkb = ax - mk。再把 a=d(a/d)a = d(a/d)、m=d(m/d)m = d(m/d) 代入,就得到 b=d((a/d)x−(m/d)k)b = d((a/d)x - (m/d)k)。括号里全部是整数,因此 dd 必须整除 bb。例如 6x≡4(mod9)6x \equiv 4 \pmod{9} 不可能成立:任何 6x−9k6x - 9k 都是 3 的倍数,可 4=1×3+14 = 1 \times 3 + 1 不是。

现在假设 dd 的确整除 bb,写 b=dhb = dh,其中 hh 是整数。贝祖等式给出 ua+vm=dua + vm = d。把整个等式乘以 hh:a(uh)+m(vh)=dh=ba(uh) + m(vh) = dh = b。移项得到 a(uh)−b=−m(vh)a(uh) - b = -m(vh)。因此 x0=uhx_{0} = uh 就是一个解,因为它乘以 aa 后与 bb 的差是 mm 的倍数。于是有没有解的条件,两个方向都证明了:

ax≡b(modm)有整数解⇕gcd⁡(a,m)∣b\begin{gathered}ax\equiv b\pmod m\\\text{有整数解}\\\Updownarrow\\\gcd(a,m)\mid b\end{gathered}

再找全解,既不漏掉,也不添错

设 x0x_{0} 是一个已经找到的解,xx 是任意另一个解。从 ax≡bax \equiv b 中减去 ax0≡bax_{0} \equiv b,减法规则给出 a(x−x0)≡0(modm)a(x - x_{0}) \equiv 0 \pmod{m}。使用刚才证明的正确消去规则,其中 d=gcd⁡(a,m)d = \gcd (a, m),得到 x−x0≡0(modm/d)x - x_{0} \equiv 0 \pmod{m/d}。这意味着 x−x0=(m/d)tx - x_{0} = (m/d)t,tt 是整数。所以每个解都必须长成下面这样:

x=x0+mdt,t∈Zx=x_0+\frac{m}{d}t,\qquad t\in\mathbb Z

还不能停下:我们得检查这样写出的每个整数都真的成立。代入可得 ax−b=a(x0+(m/d)t)−b=(ax0−b)+m(a/d)tax - b = a(x_{0} + (m/d)t) - b = (ax_{0} - b) + m(a/d)t。第一项是 mm 的倍数,因为 x0x_{0} 已经是解;第二项也是,因为 a/da/d、tt 都是整数。两项之和仍是 mm 的倍数。因此这个公式给出了全部解,而且没有混入错误的解。

为什么按原模数分类,恰好有 dd 类解?

整数解有无限多个,但它们除以 mm 的余数并没有无限多个。在上面的公式里取 t=0t = 0,1,…,d−1d - 1,就得到 dd 个不同的余数类。为什么不同?如果 t=it = i、t=jt = j 对应的答案模 mm 同余,它们的差 (m/d)(i−j)(m/d)(i - j) 就等于 mkmk。把这个等式除以正数 m/dm/d,得到 i−j=dki - j = dk。可是 −d<i−j<d-d < i - j < d,所以用唯一性证明里的理由,只能有 i=ji = j。

这些类也包括其他所有整数 tt。把 tt 除以 dd,写 t=dq+jt = dq + j,其中 0≤j<d0 \le j < d;d=1d = 1 时余数就是 0。那么 x0+(m/d)t=x0+(m/d)j+mqx_{0} + (m/d)t = x_{0} + (m/d)j + mq。最后的 mqmq 不改变模 mm 的余数,所以它已经落在 jj 所代表的那一类里。只要有解,就恰好有 dd 类。

完整算一次:4x≡2(mod6)4x \equiv 2 \pmod{6}

6=1×4+26 = 1 \times 4 + 2、4=2×2+04 = 2 \times 2 + 0 给出 d=2d = 2。2 整除右边的 2,所以有解。倒代得到 2=6−4=(−1)×4+1×62 = 6 - 4 = (-1) \times 4 + 1 \times 6。这里 h=b/d=2/2=1h = b/d = 2/2 = 1,因此 x0=(−1)×1=−1x_{0} = (-1) \times 1 = -1 是一个解。间隔是 m/d=6/2=3m/d = 6/2 = 3,所以全部解是 x=−1+3tx = -1 + 3t。

我们也可以让这串数从 2 来写,因为 −1+3t=2+3(t−1)-1 + 3t = 2 + 3(t - 1),而 t−1t - 1 仍然能取遍所有整数。写成 x=2+3kx = 2 + 3k 后,模 6 的两个代表元就容易读出来了:2 和 5。直接代回去,可以检查整个解族,而不仅是这两个数:

4(2+3k)−2=8+12k−2=6+12k=6(1+2k)\begin{aligned}4(2+3k)-2&=8+12k-2\\&=6+12k\\&=6(1+2k)\end{aligned}

每个整数 kk 都让这个式子成为 6 的倍数。反过来,上文又证明了每个解必须是这个形式。一个完整解答需要这两个方向的检查。

逐个检查,再解释为什么答案已经完整

我们要找满足 ax≡b(modm)ax \equiv b \pmod{m} 的整数 xx。只要 ax−bax - b 是 mm 的倍数,这个 xx 就成立。“下一步”检查下一个起始余数,“重置”回到 4x≡2(mod6)4x \equiv 2 \pmod{6}。表格后面的公式使用上文已经证明的结论,不是从几行数值里猜规律。

4
2
6
4x≡2(mod6)4x\equiv 2\pmod{6}

x=0:4×0−(2)=−2=(−1)×6+4x = 0: 4\times 0- (2) = -2= ( -1) \times 6+ 4

余数不是 0:这个候选值不成立。

xxax−bax - b能被 mm 整除吗?
0-2不能
1—还没有检查
2—还没有检查
3—还没有检查
4—还没有检查
5—还没有检查

下面是当前 aa、mm 的辗转相除过程。第一行如果商为 0,只是把较小的数和较大的数交换位置。出现余数 0 时留下的那个非零数就是 dd;如果一开始就整除,它可能就是最初的一个数。后面的整数系数则验证 dd 确实是 aa 与 mm 的组合。

4=0×4= 0\times 6+46+ 4

6=1×6= 1\times 4+24+ 2

4=2×4= 2\times 2+02+ 0

d=2=(−1)×4+(1)×6d = 2= (-1) \times 4+ ( 1) \times 6

因为 b/d=2/2=1b/d = 2/2 = 1,我们把上面 aa 的系数乘以这个数,得到一个解 x0=(−1)×(1)=−1x_{0} = (-1) \times (1) = -1。解之间的间隔是 m/d=6/2=3m/d = 6/2 = 3。把 x0x_{0} 换成除以这个间隔的余数 2,描述的仍是同一批整数。

x=2+3t,t∈Zx=2+3t,\qquad t\in\mathbb Z

按原来的模数 mm 分类,代表元是:2, 5.

表格只检查 0 到 m−1m - 1 这些起始余数,不过经过证明后这就足够:任意整数 xx 都能写成 x=mq+rx = mq + r,于是 ax−b=m(aq)+ar−bax - b = m(aq) + ar - b。xx 与 rr 就必定同时成立或同时不成立。这里的有限表格之所以能覆盖全部情况,有明确理由,并不是对无限列表的猜测。

09

大幂与十进制数字

现在回到开头的巨大乘积。一个非负十进制整数 NN 的末位数字 rr 在 0 到 9 之间。前面的数字数的是完整的十,所以 N=10q+rN = 10q + r。因此末位数字恰好就是除以 10 的余数。我们要找的是 720267^{2026} 的余数,而不是整个很大的数。

每乘一次 7,就留下末位数字

第一行就是 7 本身。“下一步”把上一行的余数乘以 7,再去掉完整的十位,已经算出的行会留下。这个小表格让我们看到循环的可能,后面的推理才证明它会一直重复。

指数 1:1×7=7=1\times 7 = 7= 0×10+70\times 10 + 7

还没有放入因数时,我们从乘积 1 开始;1×71 \times 7 就得到第一个因数。

指数 nn7n7^{n} 除以 10 的余数
17
71≡7(mod10)72=49=4×10+9≡9(mod10)73≡9×7=63=6×10+3≡3(mod10)74≡3×7=21=2×10+1≡1(mod10)\begin{aligned}7^1&\equiv7\pmod{10}\\7^2&=49=4\times10+9\\&\equiv9\pmod{10}\\7^3&\equiv9\times7\\&=63=6\times10+3\\&\equiv3\pmod{10}\\7^4&\equiv3\times7\\&=21=2\times10+1\\&\equiv1\pmod{10}\end{aligned}

只写出四行,不能证明规律永远重复。它之所以重复,是因为乘法规则:任何 7n7^{n} 再乘以 747^{4},就相当于把余数乘以 1,所以 7n+4≡7n(mod10)7^{n+4} \equiv 7^{n} \pmod{10}。其中 7n+4=7n×747^{n+4} = 7^{n} \times 7^{4},是把 nn 个因数 7 和另外 4 个因数 7 接在一起。

现在把因数的个数除以 4:2026=4×506+22026 = 4 \times 506 + 2。2026 个因数可以分成 506 块,每块 4 个,最后再剩 2 个因数。每块的余数是 1,最后两个因数乘起来的余数是 9,因此:

72026=(74)506×72≡1506×9=9(mod10)\begin{aligned}7^{2026}&=(7^4)^{506}\times7^2\\&\equiv1^{506}\times9\\&=9\pmod{10}\end{aligned}

末位就是 9。注意,我们把指数按已经证明的循环长度 4 来分组,并不是把 2026 换成它除以 10 的余数。数值使用的模数与循环长度,是两件不同的事。

为什么各位数字之和能判断是否被 9 整除?

一个四位数的数字依次为 aa、bb、cc、dd,表示 N=1000a+100b+10c+dN = 1000a + 100b + 10c + d。这就是十进制位值的意思:aa 数千,bb 数百,cc 数十,dd 数个。因为 10=1×9+110 = 1 \times 9 + 1,所以 10≡1(mod9)10 \equiv 1 \pmod{9}。幂的规则给出 100=102≡12=1100 = 10^{2} \equiv 1^{2} = 1,1000=103≡13=11000 = 10^{3} \equiv 1^{3} = 1。再用乘法、加法规则:

N=1000a+100b+10c+d≡a+b+c+d(mod9)\begin{aligned}N&=1000a+100b+10c+d\\&\equiv a+b+c+d\pmod9\end{aligned}

位数更多或更少也一样:额外的每一位的权重都是 10 的正整数次幂,余数仍然为 1;个位的权重本来就是 1。反复使用加法规则,就证明了任意有限位数都成立。一个数被 9 整除,恰好是余数为 0,所以它被 9 整除,当且仅当各位数字之和被 9 整除。

对于 2349,各位和是 2+3+4+9=18=2×92 + 3 + 4 + 9 = 18 = 2 \times 9,所以余数是 0;直接除也有 2349=261×92349 = 261 \times 9。对于 2026,各位和是 2+0+2+6=10=1×9+12 + 0 + 2 + 6 = 10 = 1 \times 9 + 1,所以余数是 1;直接检查,2026=225×9+12026 = 225 \times 9 + 1。这个规则现在有了理由,而且不只回答“能不能整除”,还给出了余数。

10

用完整的余数分类证明无解

同余还能证明一个整数方程根本没有答案。看 x2=4y+2x^{2} = 4y + 2,其中 xx、yy 都是整数。我们不必不断试数,而可以先问两边模 4 的余数分别可能是什么。每个整数 xx 都恰好属于余数 0、1、2、3 中的一种。如果 x≡r(mod4)x \equiv r \pmod{4},已经证明的乘法规则给出 x2≡r2x^{2} \equiv r^{2}。因此下面四种情况能覆盖每一个整数:

xx 的余数 rr平方后除以 4x2x^{2} 的余数
002=0=0×4+00^2 = 0 = 0 \times 4 + 00
112=1=0×4+11^2 = 1 = 0 \times 4 + 11
222=4=1×4+02^2 = 4 = 1 \times 4 + 00
332=9=2×4+13^2 = 9 = 2 \times 4 + 11

因此整数的平方模 4 只能余 0 或 1,绝不余 2。右边 4y+24y + 2 总是余 2,即使 yy 是负数也一样,因为 yy 是整数商,而且 0≤2<40 \le 2 < 4。两个相等的整数必须有同一个唯一的余数,现在两边却不可能有相同余数,所以没有任何整数对 (x,y)(x, y) 满足这个方程。

通过一个余数检查,并不代表一定有解。例如 17 模 4 余 1,这确实是平方允许的余数,可 x2=17x^{2} = 17 仍然没有整数解:42=16<17<25=524^{2} = 16 < 17 < 25 = 5^{2}。非负整数的平方严格递增,因为 (n+1)2−n2=n2+2n+1−n2=2n+1>0(n + 1)^{2} - n^{2} = n^{2} + 2n + 1 - n^{2} = 2n + 1 > 0,所以没有非负整数能平方得到 17;负整数的平方又与它的正数相反数相同。同余可以排除答案,可它没有排除时,我们可能还需要继续推理。

11

自己试一试,再核对完整过程

打开解释之前,先试着给每个答案写出一个等式,或者写出它为什么是某个整数倍。最后的余数算对很有用,不过写出来的理由,才让别人能够检查我们的推理。

1. −23-23 除以 7,符合要求的余数是什么?

我们要找不超过 −23-23 的 7 的倍数。(−3)×7=−21(-3) \times 7 = -21 在它右边,所以取 (−4)×7=−28(-4) \times 7 = -28。到 −23-23 的距离是 −23−(−28)=5-23 - (-28) = 5。因此 −23=(−4)×7+5-23 = (-4) \times 7 + 5,而且 0≤5<70 \le 5 < 7。商是 −4-4,余数是 5,所以 −23≡5(mod7)-23 \equiv 5 \pmod{7}。

2. 不先算完整乘积,求 38×4738 \times 47 除以 5 的余数。

38=7×5+338 = 7 \times 5 + 3,47=9×5+247 = 9 \times 5 + 2,所以余数分别是 3 和 2。用已经证明的乘法规则,38×47≡3×2=6(mod5)38 \times 47 \equiv 3 \times 2 = 6 \pmod{5}。6 还不是符合范围的余数,必须再化一次:6=1×5+16 = 1 \times 5 + 1,所以最后余 1。算完整乘积检查,1786=357×5+11786 = 357 \times 5 + 1。

3. 解 6x≡3(mod9)6x \equiv 3 \pmod{9},写出全部整数解和模 9 的全部余数类。

9=1×6+39 = 1 \times 6 + 3、6=2×36 = 2 \times 3 说明最大公因数是 3,而且 3 整除右边。写 6x−3=9k6x - 3 = 9k,把等式除以 3 得到 2x−1=3k2x - 1 = 3k,也就是 2x≡1(mod3)2x \equiv 1 \pmod{3}。因为 2×2=4=1×3+12 \times 2 = 4 = 1 \times 3 + 1,两边乘以 2 就得到 x≡2(mod3)x \equiv 2 \pmod{3}。所以 x=2+3tx = 2 + 3t,tt 是整数。模 9 的三个代表元来自 t=0t = 0、1、2,分别是 2、5、8。代入整个解族,6(2+3t)−3=12+18t−3=9(1+2t)6(2 + 3t) - 3 = 12 + 18t - 3 = 9(1 + 2t),确实是 9 的倍数;而前面的消去过程又证明了任何解都在这个解族里。

4. 为什么把右边换成 4,6x≡4(mod9)6x \equiv 4 \pmod{9} 就无解了?

如果有解,就存在整数 xx、kk 使 6x−4=9k6x - 4 = 9k。移项得到 4=6x−9k=3(2x−3k)4 = 6x - 9k = 3(2x - 3k),这会让 4 成为 3 的倍数。可是 4=1×3+14 = 1 \times 3 + 1,余数是 1 而不是 0。唯一的余数不可能同时是 0 和 1,所以假设的解不存在。

5. 找出 3 模 7 的一个逆元,再解 3x≡4(mod7)3x \equiv 4 \pmod{7}。

由 7=2×3+17 = 2 \times 3 + 1 得到 1=7−2×31 = 7 - 2 \times 3,所以 −2-2 是 3 模 7 的逆元。因为 −2=(−1)×7+5-2 = (-1) \times 7 + 5,它的非负代表元是 5。检查:3×5=15=2×7+13 \times 5 = 15 = 2 \times 7 + 1。把 3x≡43x \equiv 4 两边乘以 5,得到 15x≡20(mod7)15x \equiv 20 \pmod{7}。15≡115 \equiv 1,20=2×7+620 = 2 \times 7 + 6,所以 x≡6(mod7)x \equiv 6 \pmod{7}。全部解是 x=6+7tx = 6 + 7t。代入得到 3(6+7t)−4=14+21t=7(2+3t)3(6 + 7t) - 4 = 14 + 21t = 7(2 + 3t),全部成立;而 gcd⁡(3,7)=1\gcd (3, 7) = 1 时的消去证明又排除了其他解。

6. 3153^{15} 的末位是什么?解释所用的循环为什么会一直继续。

模 10 的前四个余数是 3、9、7、1:32=93^{2} = 9;33=27=2×10+73^{3} = 27 = 2 \times 10 + 7;34=81=8×10+13^{4} = 81 = 8 \times 10 + 1。任意次幂再乘以 343^{4},都相当于把余数乘以 1,所以每 4 步重复有了证明。现在 15=4×3+315 = 4 \times 3 + 3,于是 315=(34)3×33≡13×7=7(mod10)3^{15} = (3^{4})^{3} \times 3^{3} \equiv 1^{3} \times 7 = 7 \pmod{10},末位是 7。

7. 证明 x2+y2=4z+3x^{2} + y^{2} = 4z + 3 没有整数解。

上一节用完整的四种情况证明了,每个整数平方模 4 只能余 0 或 1。因此两个平方的余数之和只有四种组合:0+0=00 + 0 = 0、0+1=10 + 1 = 1、1+0=11 + 0 = 1、1+1=21 + 1 = 2,没有一种余 3。可是 4z+34z + 3 总是余 3,因为 zz 是整数,而且 0≤3<40 \le 3 < 4。相等的整数必须余数相同,所以任何整数三元组 (x,y,z)(x, y, z) 都不可能满足这个方程。负整数也已经被包括在余数证明里了。

最开始只是分完包后剩下的 2 个圆片。现在我们能够解释为什么可以只保留余数,为什么某些约分会丢失信息,怎样找全一次同余方程的解,以及为什么一个短而完整的余数列表能证明整数方程无解。在不定方程页面里,我们会把同余里隐藏的整数也留下:ax≡b(modm)ax \equiv b \pmod{m} 就变成真正的等式 ax−mk=bax - mk = b,其中 xx、kk 都是待求整数。