数论 整数与证明
同余
假设我们有 17 个小圆片,每 5 个装一包。3 个完整的包用掉 15 个,还剩 2 个。如果换成 22 个圆片,4 个完整的包用掉 20 个,也还剩 2 个。总数不同,可是如果我们只问“最后剩几个”,这两个总数给出的答案就一样。
我们能不能只保留这一小部分信息,不先算出很大的总数?例如,把 7 连乘 2026 次,末位到底是什么?在这个页面里,我们会从这些小包开始,把允许进行的每一步运算解释清楚,再用它找全答案,或者证明答案根本不存在。
开头只需要普通的加、减、乘。整数的记号、带余除法和证明工具,都会在用到的位置解释。图片帮助我们检查具体例子,而涉及所有整数的结论,仍然要靠完整的推理。
分完相同大小的组,我们留下什么?
我们先留在 17 个圆片、每包 5 个的例子里。下面每个蓝色实线框装了 5 个圆片,金色虚线框里只有剩下的 2 个;它还不是一个完整的 5 个一包。
5 告诉我们一整组有多大,在除法里它叫除数。3 或 4 数的是完整的组数,叫商。最后留下的 2 叫余数。余数必须不小于 0,而且小于每组大小。如果还剩至少 5 个,我们就还能装满一包,也就是说分组还没有完成。
为了让一句话同时描述不同的总数,我们用字母。 是一个整数,也就是 …,,,,0,1,2,3,… 这些没有小数或分数部分的数。 的意思就是“ 是整数”。 是固定的正整数分组大小,这里至少是 2。 是整数商, 是余数:
中两个字母挨着写表示相乘,也就是 。负数不能直接当作实际圆片的包数,不过数轴让同一个等式继续成立:从一个不超过 的倍数 出发,向右走 个单位,就到达 。例如 ,表示从 向右走 4 个单位到 。商是 ,可余数是 4,并不是 。
把整数分组,查看剩下的余数
金色点是 ,蓝色标记是 的倍数,小刻度之间相差 1。画面会跟着 显示一段数轴,所以 0 不一定在画面里。改变 或 ,然后按“下一步”;阅读时画面不会自行前进。
第 1 步,共 3 步 — 先在这段数轴上找到 。
我们选了 ,。
为什么余数一定存在,而且只有一个?
图片替几个整数找到了余数。不过要在这个基础上建立规则,我们还需要两件事:每个整数都能这样写,而且不能同时有两个不同的正确余数。我们分开证明。
先证明每个整数都写得出来
如果 不小于 0,我们从 开始,只要剩下的数至少是 ,就减去一个 。每次减法拿走一整组。剩下的数每次至少减少 1,而且不会变成负数,所以一定会停下:从 0 到 总共只有 个非负整数。如果一共减了 次,最后的数叫 ,那么 ,而且 。
如果 是负数,我们写 ,其中 是正数。对 使用刚才的分组方法,得到 。如果 ,等式两边变号就得到 。如果 ,变号后的式子是 ,但这里的 是负数。为了得到非负余数,我们从完整倍数中减去一个 ,并把同样的 补到余数部分:
右边展开是 ,所以数值没有改变。又因为 , 减去 后满足 ,新余数符合要求。这两种情况包括所有负整数,因此存在性已经证明。
再排除两个不同的答案
假设有人给出了两种写法 、,其中 、 都在 0 到 之间。用第一种写法减去第二种,因为描述的是同一个 ,左边就抵消了:
、 都在这个范围里,所以 严格处在 与 之间。可是一个整数倍的 ,要么是 0,要么大小至少是 ,因为非零整数的大小至少是 1。因此这里的倍数只能是 0。于是 ,也就是 ;接着 ,也就是 。商和符合范围要求的余数都只有一个。
这个范围很重要。去掉它, 和 都能描述同一个数。第二个等式没有算错,但 7 不符合除以 5 的余数要求。
把“余数相同”写得准确
回到 17 和 22。它们的差是 ,正好是一整包。添加或拿走完整的包会改变总数,却不改变余数。我们需要一个记号来描述这种准确的相同:,读作“ 与 模 同余”,意思是它们除以 的余数相同。固定的 叫模数。
余数相同的所有整数合在一起,叫一个余数类。我们可以拿其中任何一个数来代表这一整类,这个数就叫代表元。例如模 5 时,2 所在的类包含 …,,,2,7,12,17,22,…,因为每一个都等于 5 乘以某个整数再加 2。用 2 作代表,并不意味着这一类只有整数 2。
这里的 不表示两个整数相等,也不表示大约相等。它准确地说的是:在指定模数下,余数相同。推理时不能忘掉模数:17 和 22 模 5 同余,可是除以 3 时,它们的余数分别是 2 和 1。
还有一种说法更方便计算。记号 表示“ 整除 ”,也就是 等于 乘以某个整数;中间的竖线不是除号。我们现在从两个方向证明:余数相同,恰好等价于两数的差是 的倍数。
先假设余数相同。写成 、。相减得到 。 仍是整数,所以这个差是 的整数倍。
反过来,假设 ,其中 是整数。先不假设余数相同,分别写 、。代入,再把已经是 的倍数的部分移到另一边:
又严格处在 与 之间,同时它又是 的倍数。刚才唯一性证明里的理由迫使它只能为 0,所以 。两个方向都证明了。双向箭头的意思就是:任意一边成立,都能推出另一边成立。
接下来会用到的三个小动作,也能直接解释。每个数与自己同余,因为 。同余两边可以交换,因为 就意味着 。同一个模数下还可以把两段关系接起来:如果 、,相加得到 。所以 与 同余、 与 同余,就能推出 与 同余;模数始终必须相同。
哪些运算保留这种关系?
如果我们只知道余数,还能加或乘吗?设 、。刚才证明的差的说法让我们可以写 、,其中 、 是整数。这两个等式准确地告诉我们省略了什么:若干个完整的 。
加法与减法
和 都是整数,因此两行算出的差都是 的倍数。根据已经证明的描述,,。特别地,两边加上同一个整数是允许的,因为这个整数总与自己同余。
乘法
乘法里,我们必须把每一项都算进去,包括两个被省略的倍数之间的乘积。展开括号后,所有含 的项都可以合成一个 的倍数:
括号里只有整数的和与积,所以它还是整数。因此 。这就是为什么我们能先把因数换成余数。例如模 5 下,,所以 ;,所以 。于是 。算完整乘积检查,。更小的计算准确保留了我们要的余数。
正整数次幂
中的 是正整数时,意思是把 个 乘起来。如果 与 同余,乘法规则先给出 与 同余。再把 和 相乘,就得到 。为什么这不只是两个例子,而能包括每个正整数 ?起点 就是已知的同余。只要 这一步成立,把它再与 相乘,就证明 这一步成立。从 1 开始不断这样前进,就能到达任意正整数 。这种“起点成立,而且每一步能推到下一步”的证明叫归纳证明。
我们已经证明了加法、减法、乘法的规则,所以也证明了正整数次幂的规则。我们还没有证明可以任意除法。不能因为其他运算成立,就把除法也自动放进这个名单。
为什么直接约分会漏掉答案?
看 。普通等式 只有 。可现在的要求不同:我们要的是 为 6 的倍数。 和 都成立,因为 ,而 。可是 1 和 4 并不模 6 同余,因为 不是 6 的倍数。
乘法会把不同余数组合到一起吗?
第一列列出 所有可能的余数,第二列把它乘以 ,第三列只保留除以 的余数。金色行和选定的 到达同一个结果。保持 不变,改变 ,观察哪些不同的行会合到一起。
图中左列是起始余数,右列是结果余数。每条线都执行“乘以 ,再保留余数”。金色线落在右边同一个点上;下面的表格则写出每条线背后的准确计算。
| 除以 的余数 | ||
|---|---|---|
| 0 | 0 | |
| 1 ← 选定 | 2 | |
| 2 | 4 | |
| 3 | 0 | |
| 4 | 2 | |
| 5 | 4 |
得到同一个结果的起始余数:1, 4.
初始表格里,起始余数 1 和 4 乘以 2 后,模 6 都变成 2。两个起点合在一起之后,仅凭结果就无法分辨我们来自哪个起点。没有理由的约分,丢掉的正是这部分信息。
真正的等式仍然可以做除法。我们把条件写成 ,其中 是整数。这个等式的每一项都除以 2,得到 。它说的是 ,模数已经变成 3。把步骤倒过来,任何这样写出的 都成立。因此全部整数解是 ,也就是 …,,,1,4,7,10,…。消去因数时,模数也跟着改变了。
什么时候能保留原来的模数?不能保留时,到底应该怎么改?要完整回答,我们需要一个工具:用整数倍组合出 1,或者组合出更大的公因数。接下来我们把这个工具证明出来,而不是直接假设它存在。
找到我们需要的整数倍组合
取正整数 、。一个正整数如果同时整除它们,就是正公因数。至少总有 1,而且这样的数只有有限个:若 ,、 都是正整数,那么 ,所以 。因此每个正因数都在 1,2,…, 这个有限列表里。其中最大的叫最大公因数,记作 。我们不仅要找到它,还要证明它能写成整数倍的组合 。
换一对数,同时保留全部公因数
把 除以 ,写 。如果正整数 同时整除 、,就能写 、。那么 ,所以 也整除 。反过来,如果 、,那么 ,所以 也整除 。因此 与 这两对数拥有完全相同的正公因数。
只要余数不为 0,就继续这样替换。每个新余数都是非负整数,而且比前一个除数小,所以正余数不可能永远下降。最终会到达 。 的每个正因数也都整除 0,因为 0 等于这个因数乘以 0;所以最后一对数的最大公因数就是 本身。每次替换都保留了全部公因数,因此 也是最初 、 的最大公因数。这个过程叫辗转相除法,也叫欧几里得算法。
把每个余数是怎么来的也留下
最开始,、 已经是 、 的整数倍组合。假设当前两个数写成 、。用第一个数减去第二个数的 倍,就得到 ,系数仍然是整数。因此每个新余数也是这样的组合。起点成立,每一步都保留这个性质,所以最后留下的非零数 也一定能这样写,即使它本来就是起始数之一:
这个等式叫贝祖等式。、 可以是负数;“整数倍组合”既允许加,也允许减。我们已经证明了这些系数一定存在,并不是假设我们总能猜到它们。
把数算完整:用 7 和 12 组合出 1
对于 7 和 12,先用较大的数除以较小的数。随后每一行都取上一行的除数和余数:
最后一个非零余数是 1,所以 。怎样用最初的 7 和 12 写出这个 1?等式 告诉我们它来自哪里。其中的 2 可以换成 ,剩下的 5 可以换成 ,这样式子里就只留下 7 和 12。中间的展开也全部保留:
检查一下,。这里没有除以 7;我们找到的是 7 的一个整数乘数 ,使乘积与 1 相差一个 12 的倍数。这正是我们在寻找的、能够代替除法的办法。
正确地消去,再认识逆元
先处理乘数 与模数 的最大公因数为 1 的情况。这样的两个正整数叫互质,意思只是它们唯一的正公因数是 1。贝祖等式给出整数 、,使 。假设 ,也就是 。现在把贝祖等式乘以 :
括号里是整数,所以 整除 ,也就是 。我们选贝祖等式,是为了让一边变成 ,另一边又能用上已经知道是 的倍数的 。这样就证明了:乘数与模数互质时,可以保留模数消去乘数。
有公因数时,到底改变什么?
设 ,这里 是正整数。把两者都除以 ,记 、,它们仍然是整数。它们互质:如果正整数 同时整除 、,那么 就同时整除 、;由于 已是最大公因数,,两边除以正数 得到 。因此 只能是 1。
先证明向右的方向。写 ,把这个等式除以 ,得到 。、 互质,刚才的证明就给出 整除 。反过来,如果 ,其中 是整数,乘以 后得到 ,它是 的倍数,因此原同余成立。两个方向都成立。
还有一个边界情况需要说清楚。如果 ,那么除以 1 的余数总是 0,因为每个整数 都有 。因此所有整数模 1 都同余,化简后的条件没有施加任何限制。刚才的证明仍然成立,因为 1 整除所有整数。起初我们用 ,但消去之后可能出现这个情况。
用另一次乘法撤销乘法
普通算术里,乘以 能撤销乘以 。在这里,我们要找的是整数 ,使 。这样的 叫 模 的乘法逆元。它是在余数关系里起逆作用的整数,并不是普通分数 。如果 ,两边乘以 得到 ;再用 和乘法规则,就得到 。
逆元存在的条件恰好是 。如果最大公因数是 1,贝祖等式给出 ,因此 ,证明了 。反过来,如果 ,就有 ,也就是 。、 的每个正公因数都要整除这个组合,所以都要整除 1。如果 ,、 都是正整数, 就迫使 ,因此 1 的正因数只有 1,最大公因数就是 1。存在的条件和必要性都证明了。
刚才的 说明, 是 7 模 12 的一个逆元。加上 12,可以换成代表元 7。检查一下,。逆元不是唯一的整数,因为加上模数的倍数还能成立,但它的余数只有一个。理由是:如果 ,而且 ,刚才证明的消去规则就给出 。
找出一次同余方程的全部解
现在我们可以解 : 是正整数, 是任意整数,, 是待求整数。“一次”说的是 只乘上一个系数 ,没有平方或更高次幂。我们要回答三个问题:有没有解?怎么找出一个?又怎么知道已经找全?
先判断能不能有解
记 。如果 是解,就有整数 使 。移项得到 。再把 、 代入,就得到 。括号里全部是整数,因此 必须整除 。例如 不可能成立:任何 都是 3 的倍数,可 不是。
现在假设 的确整除 ,写 ,其中 是整数。贝祖等式给出 。把整个等式乘以 :。移项得到 。因此 就是一个解,因为它乘以 后与 的差是 的倍数。于是有没有解的条件,两个方向都证明了:
再找全解,既不漏掉,也不添错
设 是一个已经找到的解, 是任意另一个解。从 中减去 ,减法规则给出 。使用刚才证明的正确消去规则,其中 ,得到 。这意味着 , 是整数。所以每个解都必须长成下面这样:
还不能停下:我们得检查这样写出的每个整数都真的成立。代入可得 。第一项是 的倍数,因为 已经是解;第二项也是,因为 、 都是整数。两项之和仍是 的倍数。因此这个公式给出了全部解,而且没有混入错误的解。
为什么按原模数分类,恰好有 类解?
整数解有无限多个,但它们除以 的余数并没有无限多个。在上面的公式里取 ,1,…,,就得到 个不同的余数类。为什么不同?如果 、 对应的答案模 同余,它们的差 就等于 。把这个等式除以正数 ,得到 。可是 ,所以用唯一性证明里的理由,只能有 。
这些类也包括其他所有整数 。把 除以 ,写 ,其中 ; 时余数就是 0。那么 。最后的 不改变模 的余数,所以它已经落在 所代表的那一类里。只要有解,就恰好有 类。
完整算一次:
、 给出 。2 整除右边的 2,所以有解。倒代得到 。这里 ,因此 是一个解。间隔是 ,所以全部解是 。
我们也可以让这串数从 2 来写,因为 ,而 仍然能取遍所有整数。写成 后,模 6 的两个代表元就容易读出来了:2 和 5。直接代回去,可以检查整个解族,而不仅是这两个数:
每个整数 都让这个式子成为 6 的倍数。反过来,上文又证明了每个解必须是这个形式。一个完整解答需要这两个方向的检查。
逐个检查,再解释为什么答案已经完整
我们要找满足 的整数 。只要 是 的倍数,这个 就成立。“下一步”检查下一个起始余数,“重置”回到 。表格后面的公式使用上文已经证明的结论,不是从几行数值里猜规律。
余数不是 0:这个候选值不成立。
| 能被 整除吗? | ||
|---|---|---|
| 0 | -2 | 不能 |
| 1 | — | 还没有检查 |
| 2 | — | 还没有检查 |
| 3 | — | 还没有检查 |
| 4 | — | 还没有检查 |
| 5 | — | 还没有检查 |
下面是当前 、 的辗转相除过程。第一行如果商为 0,只是把较小的数和较大的数交换位置。出现余数 0 时留下的那个非零数就是 ;如果一开始就整除,它可能就是最初的一个数。后面的整数系数则验证 确实是 与 的组合。
因为 ,我们把上面 的系数乘以这个数,得到一个解 。解之间的间隔是 。把 换成除以这个间隔的余数 2,描述的仍是同一批整数。
按原来的模数 分类,代表元是:2, 5.
表格只检查 0 到 这些起始余数,不过经过证明后这就足够:任意整数 都能写成 ,于是 。 与 就必定同时成立或同时不成立。这里的有限表格之所以能覆盖全部情况,有明确理由,并不是对无限列表的猜测。
大幂与十进制数字
现在回到开头的巨大乘积。一个非负十进制整数 的末位数字 在 0 到 9 之间。前面的数字数的是完整的十,所以 。因此末位数字恰好就是除以 10 的余数。我们要找的是 的余数,而不是整个很大的数。
每乘一次 7,就留下末位数字
第一行就是 7 本身。“下一步”把上一行的余数乘以 7,再去掉完整的十位,已经算出的行会留下。这个小表格让我们看到循环的可能,后面的推理才证明它会一直重复。
指数 1:
还没有放入因数时,我们从乘积 1 开始; 就得到第一个因数。
| 指数 | 除以 10 的余数 |
|---|---|
| 1 | 7 |
只写出四行,不能证明规律永远重复。它之所以重复,是因为乘法规则:任何 再乘以 ,就相当于把余数乘以 1,所以 。其中 ,是把 个因数 7 和另外 4 个因数 7 接在一起。
现在把因数的个数除以 4:。2026 个因数可以分成 506 块,每块 4 个,最后再剩 2 个因数。每块的余数是 1,最后两个因数乘起来的余数是 9,因此:
末位就是 9。注意,我们把指数按已经证明的循环长度 4 来分组,并不是把 2026 换成它除以 10 的余数。数值使用的模数与循环长度,是两件不同的事。
为什么各位数字之和能判断是否被 9 整除?
一个四位数的数字依次为 、、、,表示 。这就是十进制位值的意思: 数千, 数百, 数十, 数个。因为 ,所以 。幂的规则给出 ,。再用乘法、加法规则:
位数更多或更少也一样:额外的每一位的权重都是 10 的正整数次幂,余数仍然为 1;个位的权重本来就是 1。反复使用加法规则,就证明了任意有限位数都成立。一个数被 9 整除,恰好是余数为 0,所以它被 9 整除,当且仅当各位数字之和被 9 整除。
对于 2349,各位和是 ,所以余数是 0;直接除也有 。对于 2026,各位和是 ,所以余数是 1;直接检查,。这个规则现在有了理由,而且不只回答“能不能整除”,还给出了余数。
用完整的余数分类证明无解
同余还能证明一个整数方程根本没有答案。看 ,其中 、 都是整数。我们不必不断试数,而可以先问两边模 4 的余数分别可能是什么。每个整数 都恰好属于余数 0、1、2、3 中的一种。如果 ,已经证明的乘法规则给出 。因此下面四种情况能覆盖每一个整数:
| 的余数 | 平方后除以 4 | 的余数 |
|---|---|---|
| 0 | 0 | |
| 1 | 1 | |
| 2 | 0 | |
| 3 | 1 |
因此整数的平方模 4 只能余 0 或 1,绝不余 2。右边 总是余 2,即使 是负数也一样,因为 是整数商,而且 。两个相等的整数必须有同一个唯一的余数,现在两边却不可能有相同余数,所以没有任何整数对 满足这个方程。
通过一个余数检查,并不代表一定有解。例如 17 模 4 余 1,这确实是平方允许的余数,可 仍然没有整数解:。非负整数的平方严格递增,因为 ,所以没有非负整数能平方得到 17;负整数的平方又与它的正数相反数相同。同余可以排除答案,可它没有排除时,我们可能还需要继续推理。
自己试一试,再核对完整过程
打开解释之前,先试着给每个答案写出一个等式,或者写出它为什么是某个整数倍。最后的余数算对很有用,不过写出来的理由,才让别人能够检查我们的推理。
1. 除以 7,符合要求的余数是什么?
我们要找不超过 的 7 的倍数。 在它右边,所以取 。到 的距离是 。因此 ,而且 。商是 ,余数是 5,所以 。
2. 不先算完整乘积,求 除以 5 的余数。
,,所以余数分别是 3 和 2。用已经证明的乘法规则,。6 还不是符合范围的余数,必须再化一次:,所以最后余 1。算完整乘积检查,。
3. 解 ,写出全部整数解和模 9 的全部余数类。
、 说明最大公因数是 3,而且 3 整除右边。写 ,把等式除以 3 得到 ,也就是 。因为 ,两边乘以 2 就得到 。所以 , 是整数。模 9 的三个代表元来自 、1、2,分别是 2、5、8。代入整个解族,,确实是 9 的倍数;而前面的消去过程又证明了任何解都在这个解族里。
4. 为什么把右边换成 4, 就无解了?
如果有解,就存在整数 、 使 。移项得到 ,这会让 4 成为 3 的倍数。可是 ,余数是 1 而不是 0。唯一的余数不可能同时是 0 和 1,所以假设的解不存在。
5. 找出 3 模 7 的一个逆元,再解 。
由 得到 ,所以 是 3 模 7 的逆元。因为 ,它的非负代表元是 5。检查:。把 两边乘以 5,得到 。,,所以 。全部解是 。代入得到 ,全部成立;而 时的消去证明又排除了其他解。
6. 的末位是什么?解释所用的循环为什么会一直继续。
模 10 的前四个余数是 3、9、7、1:;;。任意次幂再乘以 ,都相当于把余数乘以 1,所以每 4 步重复有了证明。现在 ,于是 ,末位是 7。
7. 证明 没有整数解。
上一节用完整的四种情况证明了,每个整数平方模 4 只能余 0 或 1。因此两个平方的余数之和只有四种组合:、、、,没有一种余 3。可是 总是余 3,因为 是整数,而且 。相等的整数必须余数相同,所以任何整数三元组 都不可能满足这个方程。负整数也已经被包括在余数证明里了。
最开始只是分完包后剩下的 2 个圆片。现在我们能够解释为什么可以只保留余数,为什么某些约分会丢失信息,怎样找全一次同余方程的解,以及为什么一个短而完整的余数列表能证明整数方程无解。在不定方程页面里,我们会把同余里隐藏的整数也留下: 就变成真正的等式 ,其中 、 都是待求整数。
