Lec 9 模运算
资料依据:课程视频与 transcript · Lecture notes
TL;DR
- a≡b(modn) 表示 n∣(a−b);同余与加法、减法和乘法相容,因而可在余数类上做代数运算。
- 模 n 下的除法必须通过乘法逆元实现;a 存在逆元当且仅当 gcd(a,n)=1。
- Fermat 小定理说明当 p 为素数且 pmida 时,ap−1equiv1pmodp,它支撑快速模幂、素性测试与公钥密码的基础论证。
1. 模运算的直觉
模运算的核心思想:忽略 n 的倍数,只关注余数。
| 场景 | 模数 n |
|---|
| 奇偶性 | 2 |
| 星期几 | 7 |
| 数字末位 | 10 |
| 时钟(12小时) | 12 |
Example. 现在是周二,100 天后是星期几?100rem7=2,周二加 2 天 = 周四。
2. 同余关系 (Congruence)
Definition. 称 a 同余于 b 模 n(a is congruent to b mod n),记作 a≡nb,当且仅当 n∣(a−b)。
等价刻画:
Theorem. a≡nb⟺(aremn)=(bremn)。
Proof. 若余数相同均为 r,则 a=nq+r,b=nq′+r,故 a−b=n(q−q′),即 n∣(a−b)。反之若 n∣(a−b),设 b=qn+r,则 a=(k+q)n+r,由带余除法唯一性知 aremn=r。■
剩余类(residue classes / equivalence classes): 模 n 下恰好有 n 个类 [0],[1],…,[n−1],每个整数属于其余数所在的类。
示例(模 5):
[0] = { ..., -10, -5, 0, 5, 10, ... }
[1] = { ..., -9, -4, 1, 6, 11, ... }
[2] = { ..., -8, -3, 2, 7, 12, ... }
[3] = { ..., -7, -2, 3, 8, 13, ... }
[4] = { ..., -6, -1, 4, 9, 14, ... }
3. 符号说明
| 写法 | 含义 | 类型 |
|---|
a rem n / a mod n | a 除以 n 的非负余数,值域 [0,n) | 函数,单一确定值 |
| a≡nb / a≡b(modn) | a 与 b 模 n 同余 | 关系,双方无需在 [0,n) 内 |
注意: 不同编程语言对负数取模行为不同。本课始终使用非负余数定义(Python / Mathematica 约定)。例:(−43)rem10=7,而非 −3。
4. 模运算的代数性质
Theorem. 若 a≡nb,则对任意 c:
- a+c≡nb+c
- ac≡nbc
- a−c≡nb−c
- c−a≡nc−b
Proof. 每条均由 n∣(a−b) 直接验证。例如第 2 条:ac−bc=(a−b)c,是 a−b 的倍数,故 n∣(ac−bc)。■
Theorem. 若 x≡ny,则对任意 k≥1,xk≡nyk。
Proof(归纳): Base case k=1 即假设。归纳步骤:
xk=x⋅xk−1≡ny⋅xk−1≡ny⋅yk−1=yk■
警告: 指数本身不能随意对 n 取模。例:1≡56,但 21=2≡564=26。
Example. 求 x=1133511111(6+77995000) 的最后两位(即 xrem100)。
- 底数:1133≡10033,进一步 351≡10035,352≡10025,353≡10075,354≡10025,…(在 25 和 75 间交替),3511111≡10075。
- 指数中:99≡100−1,故 995000≡100(−1)5000=1,即括号内 ≡1006+1=7。
- 故 x≡10075×7=525≡10025。
5. 模意义下的除法与逆元
5.1 乘法逆元 (Multiplicative Inverse)
Definition. a 模 n 的乘法逆元是满足 ab≡n1 的整数 b,记作 a−1。
Theorem. a 有模 n 的逆元 ⟺ gcd(a,n)=1(即 a 与 n 互质)。
Proof. ∃b:ab≡n1⟺∃b,q:ab−nq=1⟺1 是 a,n 的 ILC ⟺gcd(a,n)=1。■
Corollary. 若 p 是质数且 a≡p0,则 a 有模 p 的逆元。
求逆元的方法: 用 Pulverizer(扩展欧几里得算法)。
Example. 7 和 13 是模 30 的互逆(7×13=91≡301)。
解方程 7x≡3014:两边乘以 13,得 91x≡30182,即 x≡302。
5.2 注意:不能随便"约分"
若 gcd(a,n)>1,则 a 无逆元,从 ac≡nbc 不能推出 a≡nb。
例:3×5≡63×1,但 5≡61。
6. Fermat 小定理 (Fermat's Little Theorem)
Theorem (FLT). 若 p 为质数且 a≡p0,则 ap−1≡p1。
Proof. 考虑集合 {a,2a,3a,…,(p−1)a} 模 p 的余数:
- 无一为 0(因 p∤a,p 是质数);
- 无两个相同(若 ia≡pja,则因 a 有逆元,i≡pj,但 1≤i,j≤p−1 无重复)。
故此集合模 p 恰好是 {1,2,…,p−1} 的某个排列,两边取乘积:
(p−1)!⋅ap−1≡p(p−1)!
因 gcd((p−1)!,p)=1,可约去 (p−1)!,得 ap−1≡p1。■
推论: 模质数 p 时,指数可以对 p−1 取模(而非对 p):
当 p∤a 时,由 Fermat 小定理可将正指数按 p−1 化简:
ak≡pakrem(p−1)
7. 应用
7.1 整除 9 的判断法
Theorem. n 被 9 整除 ⟺ n 的各位数字之和被 9 整除。
Proof. 设 n=∑idi⋅10i。因 10≡91,故 10i≡91,所以 n≡9∑idi。■
7.2 ISBN 校验码
ISBN-10:(a1,…,a10),校验条件为
∑i=110i⋅ai≡110
- 模数 11 是质数,gcd(10,11)=1,故 a10 总有唯一解(由前 9 位确定)。
- 可证:单个数字出错或相邻两位互换,校验均失败。
7.3 奇偶校验 (Parity)
简单 RAID 思路:存 b1,b2,第三块存 b3=b1⊕b2(加法模 2)。任意一块损坏可从另两块恢复。
8. 关键术语速查
| 英文 | 中文 |
|---|
| Congruence a≡nb | 同余 |
| Residue / Remainder | 余数 |
| Residue class / Equivalence class | 剩余类 / 等价类 |
| Modular arithmetic | 模运算 / 模算术 |
| Multiplicative inverse | 乘法逆元 |
| Coprime | 互质 |
| Fermat's Little Theorem (FLT) | Fermat 小定理 |
| Parity | 奇偶性 |
| ISBN checksum | ISBN 校验码 |
我的理解
我的理解
模运算中“约分”失败的根本原因是乘数未必有逆元。先检查与模数互素,再乘以逆元,比套用普通数学直觉更安全。