相关笔记
- 前置笔记:31.1 初等数论与最大公约数、第30章_多项式与FFT-章节汇总
- 关联概念:模运算、同余、中国剩余定理、模逆元、费马小定理、欧拉函数
- 章节汇总:第31章_数论算法-章节汇总
概览
知识结构总览
flowchart TD A["<b>31.3 模运算</b>"] --> A1["模加法 (a+b) mod n"] A --> A2["模乘法 (a×b) mod n"] A --> A3["模幂运算 a^b mod n"] A --> A4["代数性质"] A4 --> A4a["封闭性、结合律、交换律"] A4 --> A4b["单位元、逆元"] A --> A5["$\mathbb{Z}_n^*$ 群"] B["<b>31.4 求解模线性方程</b>"] --> B1["方程形式: ax ≡ b (mod n)"] B --> B2["有解条件: gcd(a,n) | b"] B --> B3["d = gcd(a,n) 个不同解"] B --> B4["MODULAR-LINEAR-EQUATION-SOLVER"] C["<b>31.5 中国剩余定理 (CRT)</b>"] --> C1["两两互素模数"] C --> C2["构造性证明"] C --> C3["唯一解 mod N"] C --> C4["应用: RSA加速、大整数运算"] A --> B B --> C A5 --> B2
核心思想
31.3 模运算
模的定义与基本运算
给定正整数 ,对于任意整数 , 定义为 除以 的非负余数,即满足 且 的唯一整数 。模等价(同余)关系记为 ,其含义是 。
模加法:。先计算普通加法 ,再取模。
模乘法:。先计算普通乘法 ,再取模。
模幂运算:。利用重复平方法(square-and-multiply),将指数 的二进制展开逐步计算,避免直接计算巨大的 。
模幂运算的逐步执行实例
计算 :
将指数 10 写成二进制:。
| 步骤 | 指数位 | 当前结果 | 底数 | 操作 |
|---|---|---|---|---|
| 初始 | — | 1 | 7 | — |
| 位 0(=0) | 0 | 1 | 底数平方取模 | |
| 位 1(=1) | 1 | 乘入结果,底数平方取模 | ||
| 位 2(=0) | 0 | 10 | 底数平方取模 | |
| 位 3(=1) | 1 | — | 乘入结果 |
最终结果:。
验证:,,,故 。正确。
模运算的代数性质
集合 在模加法和模乘法下构成一个交换环。以下是关键性质:
| 性质 | 加法 | 乘法 |
|---|---|---|
| 封闭性 | 若 ,则 | 若 ,则 |
| 结合律 | ||
| 交换律 | ||
| 单位元 | ||
| 逆元 | 每个 都有加法逆元 | 仅当 时存在乘法逆元 |
证明:模加法满足结合律
【结合律(逐项展开验证)】:需要证明 。
设 ,其中 ,即 。
再设 ,其中 ,即 。
类似地,设 ,,再设 ,。
由于普通整数加法满足结合律:,而模运算只是对同一整数取余,因此 。
证明:模乘法满足交换律
【交换律(利用整数乘法交换律)】:需要证明 。
由于 (整数乘法交换律),两者是同一个整数,取模后自然相等。
证明:乘法逆元存在的充要条件
【乘法逆元存在条件(利用 Bézout 等式)】: 的乘法逆元存在当且仅当 。
充分性:若 ,由 31.1 初等数论与最大公约数 中的扩展欧几里得算法(EXTENDED-EUCLID),存在整数 使得 。两边取模 :,因此 就是 在 中的乘法逆元。
必要性:若 有乘法逆元 ,即 ,则 (某个整数 )。设 ,则 且 ,故 ,因此 。
群
定义 ,即 中所有与 互素的元素构成的集合。 在模乘法下构成一个交换群(欧拉函数):
- 封闭性:若 且 ,则 。
- 结合律:继承自整数乘法的结合律。
- 单位元:。
- 逆元:每个元素都有模乘法逆元(由上述证明)。
的阶(元素个数)为 ,即 欧拉函数。
实例:,。验证:,故 ,。
证明: 的封闭性
【封闭性(利用整除性质)】:若 且 ,则 。
证明:反证法。假设 ,则存在素数 使得 ,故 且 。由于 是素数且 ,由欧几里得引理, 或 。若 ,则 ,与 矛盾。若 ,则 ,与 矛盾。因此 。
模运算的分配律
【分配律(连接加法与乘法的桥梁)】:模乘法对模加法满足分配律,即 。
证明:(整数分配律),而模运算保持等价关系,故 。
分配律是 构成”环”(而非仅仅是”群”)的关键性质。它确保了模运算中的代数恒等式(如 )在模意义下依然成立。
31.4 求解模线性方程
问题定义
给定整数 、、(),求解满足 的所有 。
有解条件与解的个数
【有解条件(利用整除性)】:方程 有解当且仅当 。
证明: 当且仅当存在整数 使得 ,即 。由 Bézout 定理, 能取到的所有值恰好是 的倍数。因此,方程有解当且仅当 是 的倍数,即 。
【解的个数(利用整除关系)】:若 且 ,则方程恰好有 个模 下不同的解,分别为 ,其中 是一个特解。
证明概要:设 ,,。原方程等价于 ,其中 。此方程在模 下有唯一解 。在模 下, 恰好是 个不同的解。
MODULAR-LINEAR-EQUATION-SOLVER 伪代码
MODULAR-LINEAR-EQUATION-SOLVER(a, b, n)
1 (d, x', y') ← EXTENDED-EUCLID(a, n)
2 if d ∤ b
3 return "无解"
4 x'_0 ← x' × (b / d) mod (n / d)
5 return (x'_0, x'_0 + n/d, x'_0 + 2n/d, ..., x'_0 + (d-1)n/d)
执行流程图:
flowchart TD A(["开始"]) --> B["输入 a, b, n"] B --> C["调用 EXTENDED-EUCLID(a, n)"] C --> D["获得 d, x', y'"] D --> E{"d 整除 b?"} E -->|"否"| F["返回 无解"] E -->|"是"| G["计算 x₀ = x' × (b/d) mod (n/d)"] G --> H["循环 i = 0 到 d-1"] H --> I["输出 x₀ + i×(n/d)"] I --> J{"i < d-1?"} J -->|"是"| K["i = i + 1"] K --> I J -->|"否"| L(["结束"]) F --> L
算法解读:
- 第 1 行:调用 31.1 初等数论与最大公约数 中的扩展欧几里得算法,得到 以及满足 的系数 。
- 第 2-3 行:检查有解条件。
- 第 4 行: 两边乘以 ,得 ,故 是方程 的解。
- 第 5 行:返回所有 个解。
逐步执行实例
求解 。
步骤 1:计算 。
,,故 。
扩展欧几里得回代:,故 ,(因为 )。
步骤 2:检查 是否整除 。,有解。
步骤 3:,,。
。
步骤 4: 个解:,。
验证:?等一下——重新检查。
实际上 ,。问题出在哪里?
重新审视:。
,:,故 。
验证:,。正确!
两个解为 ,。
验证 :,。正确。
31.5 中国剩余定理(CRT)
定理陈述
【中国剩余定理(CRT)】:设 为两两互素的正整数(即对所有 ,),则对任意整数 ,同余方程组
在模 下有唯一解。
构造性证明
【CRT 构造性证明(分步构造)】:
步骤 1:定义 ,对每个 ,令 。
由于 两两互素,。
步骤 2:对每个 ,利用扩展欧几里得算法求 模 的乘法逆元 ,即 。
步骤 3:构造解 。
步骤 4:验证。对任意 ,考察 :
当 时, 包含因子 (因为 与 互素且 包含 ),故 ,从而 。
当 时,,故 。
因此 ,对所有 成立。
步骤 5(唯一性):若 也是解,则 对所有 成立,即 。由于 两两互素,,故 。
逐步执行实例
求解方程组:
步骤 1:。
,,。
步骤 2:求各 。
- :,求 ,(因为 )。
- :,求 ,。
- :,求 ,。
步骤 3:。
步骤 4:。
验证:
- ✓
- ✓
- ✓
这就是经典的”物不知数”问题(孙子定理),出自《孙子算经》。
CRT 的应用
1. 大整数运算加速
CRT 允许我们将大模数 上的运算分解为多个小模数 上的独立运算,最后再合并结果。由于模 的运算中中间结果更小,计算速度更快。
2. RSA 解密加速
在 RSA 中,私钥持有者知道 的因子分解。解密时,不用直接计算 ( 是一个大数),而是分别计算:
然后用 CRT 合并得到 。由于 和 各约 的一半大小,模幂运算的复杂度从 降为 ,实现约 4 倍加速。
补充理解
模运算的代数结构:从环到域
模运算不仅仅是”取余数”的简单操作,它在抽象代数中拥有丰富的结构。集合 在模加法和模乘法下构成一个交换环(commutative ring),满足加法交换群、乘法半群和分配律。当 为素数 时, 中每个非零元素都有乘法逆元,此时 构成一个有限域(finite field),记为 。有限域是现代密码学(如 AES、椭圆曲线密码)的数学基础。
中国剩余定理的历史渊源:孙子定理
中国剩余定理的历史可以追溯到公元 3 世纪的中国数学家孙子(Sun Tzu,非《孙子兵法》作者)。在《孙子算经》中,孙子提出了著名的”物不知数”问题:“今有物,不知其数。三三数之剩二,五五数之剩三,七七数之剩二。问物几何?“这恰好是方程组 、、。孙子给出了答案 23,但未提供一般性证明。直到 13 世纪,秦九韶在《数书九章》中提出”大衍求一术”,才给出了完整的算法。该定理在西方由欧拉(Euler, 1743)和高斯(Gauss, 1801)独立发现并严格证明。
参考阅读:Historical Development of the Chinese Remainder Theorem - Harvard
CRT 在 RSA 加速中的应用
RSA 解密的标准方法是对密文 计算 ,其中 是两个大素数的乘积。利用 CRT,可以将这个大模数运算分解为两个小模数运算:先分别计算 和 (其中 ,),再通过 Garner 算法或标准 CRT 合并得到 。由于模幂运算的时间复杂度约为 ( 为模数的比特长度),分解后两个 比特的运算总代价为 ,相比直接运算获得约 4 倍加速。实际 RSA 实现中几乎都采用 CRT 优化。
模幂运算伪代码(MODULAR-EXPONENTIATION)
CLRS 中给出的重复平方法伪代码如下:
MODULAR-EXPONENTIATION(a, b, n)
1 c ← 0
2 d ← 1
3 设 b 的二进制表示为 ⟨b_k, b_{k-1}, ..., b_1, b_0⟩
4 for i ← k downto 0
5 c ← 2 × c
6 d ← (d × d) mod n
7 if b_i = 1
8 c ← c + 1
9 d ← (d × a) mod n
10 return d
执行流程图:
flowchart TD A(["开始"]) --> B["输入 a, b, n"] B --> C["初始化 c=0, d=1"] C --> D["设 b 的二进制为 b_k...b_0"] D --> E["i = k"] E --> F{"i >= 0?"} F -->|"否"| G["返回 d"] F -->|"是"| H["c = 2 × c"] H --> I["d = (d × d) mod n"] I --> J{"b_i == 1?"} J -->|"是"| K["c = c + 1"] K --> L["d = (d × a) mod n"] L --> M["i = i - 1"] J -->|"否"| M M --> F G --> N(["结束"])
算法解读:
- 变量 追踪当前已处理的指数部分(始终满足 ),变量 维护 。
- 第 5-6 行:将指数左移一位(乘以 2),同时将结果平方。
- 第 7-9 行:若当前二进制位为 1,则将 乘入结果。
- 时间复杂度: 次模乘法,每次模乘法代价为 (使用学校乘法),总复杂度 。
模幂运算逐步执行实例(对照伪代码)
计算 ,,。,。
| i | b_i | c(更新前) | c(更新后) | d(更新前) | d(更新后) |
|---|---|---|---|---|---|
| 3 | 1 | 0 | 1 | ||
| 2 | 0 | 1 | 7 | ||
| 1 | 1 | 2 | 10 |
等一下,重新计算:,。
| i | b_i | c(更新后) | d(更新后) |
|---|---|---|---|
| 3 | 1 | 1 | |
| 2 | 0 | 2 | |
| 1 | 1 | 5 | |
| 0 | 0 | 10 |
最终 ,即 。与前文结果一致。
模线性方程求解的几何直观
模线性方程 可以从几何角度理解:在整数格点(lattice)上,方程 描述了一条直线,我们需要找到这条直线上所有整数坐标点 。由于 ,直线 上相邻整数点的 坐标间距恰好为 。当 时,直线经过整数格点,解的周期性反映了模运算的”循环”本质。这种几何视角有助于理解为什么解恰好有 个且等间距分布。
易混淆点
模加法逆元 ≠ 模乘法逆元
在 中,每个元素 都有加法逆元 (因为 ),但乘法逆元仅当 时才存在。例如在 中, 的加法逆元是 (),但 没有乘法逆元(因为 )。切勿将两者混淆。
CRT 要求模数两两互素
中国剩余定理的标准形式要求模数 两两互素。如果模数不互素,方程组可能无解(即使每个方程单独有解),或者解不唯一。例如 和 :由第一个方程 ,代入第二个 ,即 ,但 ,无解。对于不互素的情况,需要使用 CRT 的推广版本(generalized CRT),通过逐步合并方程并检查一致性条件来处理。
模运算中"除法"等价于乘以模逆元,但模逆元不一定存在
在模运算中,不能直接”除以”一个数。例如,从 不能直接得出 ,因为 在 中没有乘法逆元。正确做法是使用 31.4 节的方法:,有两个解 和 。只有在 时,才能安全地”两边除以 “(即乘以 )。
习题精选
| 题号 | 题目描述 | 难度 |
|---|---|---|
| 31.3-3 | 证明模运算等式 | ★★☆ |
| 31.3-5 | 证明等比数列模n求和公式 | ★★★ |
| 31.4-2 | 求解模线性方程 | ★★☆ |
| 31.5-2 | 利用CRT求解同余方程组 | ★★★ |
习题 31.3-3
题目:证明对于所有正整数 和所有整数 ,有 。
解答
设 ,则 ,其中 。
(因为 时 ;当 时 )。
左边 。
右边 。
差值 。
直接验证左边模 :(因为 ,)。
。
因此需要 ,即 。
这在一般情况下并不成立(例如 ,,,)。
重新审视题目。题目原文应为 或其他形式。若按题目字面意思,该等式一般不成立。但若理解为 ,这显然成立。建议核对原题表述。
习题 31.3-5
题目:证明对于任意正整数 ,如果 ,则 。
解答
设 。
由于 , 在 中有乘法逆元 。
计算 。
,即 。
情况 1:。
此时 在 中可逆(因为若 则 ,矛盾),故 。
由费马小定理( 为素数时 )或欧拉定理(),但这里 不一定是素数。
重新考虑:(在整数意义下),需要证明 。
注意 的值。由于 , 是 中的元素。由欧拉定理,。
但题目要求 项之和模 为 0,对一般 这不一定成立。例如 ,,, ✓。,,, ✓。
一般证明:。注意 。由于 ,乘以 是 上的一个置换。因此 。
但这里求和的是 而非 。需要另一种方法。
正确证明:。考虑 ,即 。
若 ,则 。
若 ,需要 。由多项式因式分解,。在 中,。由于 , 在 中的阶整除 。但阶不一定整除 。
实际上,该命题对一般合数 不成立。例如 ,(),,, ✓。
关键观察:,故 。
由欧拉定理,。但需要 ,这仅在 的阶整除 时成立。
该题在 CLRS 中的条件可能要求 为素数(费马小定理的推论)。当 为素数时,(费马小定理),故 ,。若 ,则 ,而非 。
建议核对原题条件。若原题为 为素数且 ,则结论为 不成立(应为 )。若 ,则 。
习题 31.4-2
题目:找出方程 的所有解。
解答
本题已在正文中详细求解。
,,有解。
,,。
扩展欧几里得:,故 。
。
两个解: 和 。
验证: ✓, ✓。
习题 31.5-2
题目:找出满足以下同余方程组的最小非负整数:
解答
检查模数两两互素:。满足 CRT 条件。
。
,,,。
求各 ():
- :,,()。
- :,,()。
- :,,()。
- :,,()。
。
,,。
最小非负解:。
验证:
- ✓()
- ✓()
- ✓()
- ✓()
视频学习指南
| 主题 | 推荐资源 | 时长 | 难度 | 说明 |
|---|---|---|---|---|
| 模运算基础 | 3Blue1Brown - Modular Arithmetic | ~15 min | 入门 | 直观理解模运算的几何意义(时钟模型) |
| 模幂运算 | MIT 6.006 Lecture 12 | ~20 min | 中等 | 重复平方法的实现与复杂度分析 |
| 与欧拉函数 | Michael Penn - The Group of Units | ~12 min | 中等 | 从群论视角理解模乘法逆元 |
| 模线性方程求解 | Michael Penn - Linear Congruences | ~15 min | 中等 | 完整求解过程与实例演示 |
| 中国剩余定理 | 3Blue1Brown - CRT | ~18 min | 入门 | CRT 的几何直觉与构造性证明 |
| CRT 与 RSA | Christof Paar - RSA CRT | ~25 min | 进阶 | CRT 加速 RSA 解密的工程实现 |
教材原文
定理 31.20(中国剩余定理) 设 为两两互素的正整数,定义 。则对任意整数 ,关于未知量 的同余方程组
在模 下有唯一解。
——CLRS 第 4 版,第 31.5 节
定理 31.17 方程 对未知量 有解,当且仅当 ,其中 。
——CLRS 第 4 版,第 31.4 节
推论 31.21 如果 两两互素,且 ,则对所有整数 和 ,
当且仅当
——CLRS 第 4 版,第 31.5 节
参见Wiki
- 章节导航:第31章_数论算法-章节汇总
- 前置知识:31.1 初等数论与最大公约数、第30章_多项式与FFT-章节汇总
- 后续章节:31.3 元素的幂与RSA
- 关联概念:模运算 | 同余 | 中国剩余定理 | 模逆元 | 费马小定理 | 欧拉函数
- 欧拉定理