观察
- m=7:把 a 从 1 拖到 6。箭头有没有撞过车?
- m=12:比较 a=5 和 a=8。再把 a 从 1 试到 11,记下所有“不撞车”的 a。
- 撞车的时候看“到达的位置”:m=12、a=8 时只到了 3 个位置,a=9 时到了几个?它和 gcd(a,m) 有什么关系?
- 撞车时,被射中的位置上的数有什么共同点?(m=12、a=8:0,4,8。)
从模 m 的每个剩余类里各取一个数,得到的 m 个数叫模 m 的一个完全剩余系。换句话说:m 个整数,两两不同余。
模 5 的完全剩余系可以是 0,1,2,3,4,也可以是 −2,−1,0,1,2,甚至是 5,11,17,23,29。任意连续 m 个整数都是一个完全剩余系。
先猜后证
随便写 8 个整数。下面哪句话一定成立?
先选定答案,才能看到结论。
✓ 猜对了!✗ 和你想的不一样——这正是值得停一下的地方。
模 7 只有 7 个剩余类(7 个抽屉)。8 个数放进去,一定有两个落在同一类,它们的差就是 7 的倍数。
另外两句都可以失败:取 1,8,15,22,29,36,43,50(全部余 1),任何两个的和都余 2,也没有一个是 7 的倍数。
m+1 个整数中必有两个模 m 同余——剩余类就是现成的抽屉。
为什么
(a, m) = 1 时,乘以 a 只是重新排队
第 1 / 6 步 -
要证什么 模 7,乘以 3:七个余数 0,1,…,6 各射出一支箭头。我们要证:只要 (a,m)=1,m 支箭头的落点两两不同。
x ⟼ axmodm
-
假设撞车
-
用上互素
-
可是差太小了
-
不撞,就一定坐满
-
顺手得到“倒数”
用处:只查一个周期
一个只涉及加、减、乘的式子,把 n 换成同余的数,结果的余数不变。所以要知道它模 m 的全部可能,只需把 n 换成一个完全剩余系里的 m 个数,逐个算一遍。
比如 n2 被 5 除可能余几?只要查 n=0,1,2,3,4:
五个数就代表了全体整数。平方数被 5 除只可能余 0,1,4——拖动模 m 看看别的。
如果去掉一个条件
结论:x 跑遍模 m 的完全剩余系时,ax 也跑遍 ← 还成立吗?
m=9,a=4。九支箭头,九个落点,一个不重、一个不漏。
m=9,a=6,(6,9)=3。哪些位置一支箭头都没有?
6x 永远是 3 的倍数,只能落在 0,3,6。每个落点被 3 支箭头射中,其余六个位置空着。
在机器里换别的 a:模 9 时哪些 a 是好的?
练一练
求 0≤x≤8 中满足 7x≡1(mod9) 的 x。
提示 · 方向(7,9)=1,所以这样的 x 恰有一个。
提示 · 方法把 7x 对 x=1,2,… 依次算余数,或者找一个比 9 的倍数多 1 的 7 的倍数。
a 取 1,2,…,11 中的哪些数时,0,a,2a,…,11a 是模 12 的完全剩余系?
提示 · 第一步12=22×3,所以 a 不能是 2 或 3 的倍数。
至少要取多少个整数,才能保证其中一定有两个数的差能被 10 整除?
提示 · 方向差被 10 整除,就是模 10 同余。
提示 · 方法模 10 有 10 个剩余类。最坏的情形是每一类各取一个。
提示 · 第一步取 0,1,…,9 这 10 个数时,没有两个数同余。所以 10 个不够。
完整解答10 个数可以两两不同余;11 个数放进 10 个剩余类,必有两个同类,差被 10 整除。答案是 11。
证明:任意给出 5 个整数,一定能从中选出 3 个,使它们的和被 3 整除。
提示 · 方向只看每个数被 3 除的余数:0、1 或 2。
提示 · 方法分两种情况:三种余数都出现了;或者没有都出现。
提示 · 第一步三种余数都出现时,各取一个:0+1+2=3。否则 5 个数挤在至多两个类里。
完整解答若余数 0,1,2 都出现,各取一个,和 ≡0+1+2≡0(mod3)。否则 5 个数落在至多 2 个剩余类里,必有一类至少含 3 个数;取这 3 个,它们余数相同,设为 r,和 ≡3r≡0(mod3)。