相关笔记


概览

本节涵盖CLRS第31章前两节的核心内容,为数论算法奠定数学基础。

31.1 初等数论概念:建立整除性(divisibility)、素数与合数(prime/composite)、算术基本定理(fundamental theorem of arithmetic)等基本概念,并定义最大公约数(greatest common divisor, GCD)与最小公倍数(least common multiple, LCM)。

31.2 最大公约数:介绍欧几里得算法(Euclidean algorithm)——人类历史上最古老的算法之一,通过辗转相除高效计算GCD;进而介绍扩展欧几里得算法(extended Euclidean algorithm),不仅求出GCD,还求出满足贝祖恒等式(Bézout identity)的系数;最后给出Lamé定理,分析欧几里得算法的最坏情况复杂度。

核心要点

  • 整除性是所有数论概念的基石
  • 算术基本定理保证素因数分解的唯一性
  • 欧几里得算法基于 的递归关系
  • 扩展欧几里得算法可同时求出贝祖系数,是密码学中计算模逆元的关键工具
  • Lamé定理表明最坏情况下除法次数不超过较小数十进制位数的5倍

    A["31.1 初等数论概念"] --> B["整除性 Divisibility"]
    A --> C["素数与合数 Prime & Composite"]
    A --> D["算术基本定理 FTA"]
    A --> E["GCD 与 LCM"]

    B --> B1["定义:d|a ⟺ ∃k: a = dk"]
    B --> B2["性质:传递性、线性组合封闭性"]

    C --> C1["素数:仅有1和自身两个正因子"]
    C --> C2["合数:存在非平凡因子"]

    D --> D1["每个 n > 1 可唯一分解为素数之积"]
    D --> D2["标准形式:n = p₁^e₁ · p₂^e₂ ··· p_k^e_k"]

    E --> E1["gcd(a,b):最大公共正因子"]
    E --> E2["lcm(a,b):最小公共正倍数"]
    E --> E3["gcd × lcm = |ab|"]

    F["31.2 最大公约数"] --> G["欧几里得算法 EUCLID"]
    F --> H["扩展欧几里得算法 EXTENDED-EUCLID"]
    F --> I["Lamé定理"]

    G --> G1["核心递归:gcd(a,b) = gcd(b, a mod b)"]
    G --> G2["终止条件:gcd(a,0) = a"]

    H --> H1["返回 (d, x, y) 满足 d = ax + by"]
    H --> H2["贝祖恒等式 Bézout Identity"]

    I --> I1["最坏情况:连续Fibonacci数"]
    I --> I2["除法次数 ≤ 5d(d为十进制位数)"]

核心思想

31.1 初等数论概念

整除性(Divisibility)

整除性是数论中最基本的关系。设 为整数,其中 。如果存在某个整数 使得 ,则称 整除 divides ),记作 。此时也称 的一个约数(divisor)或因子(factor), 的一个倍数(multiple)。

如果 不能整除 ,则记作

整除性的基本性质(以下均设 为整数,且 ):

  1. 自反性:若 ,则

    • 证明:由 ,由 ,故 ,即 。同理
  2. 传递性:若 ,则

    • 证明:,故
  3. 线性组合封闭性:若 ,则对任意整数 ,有

    • 证明:,故
  4. 比较性质:若 ,则

    • 证明:(否则 ),故
  5. 整除等价 当且仅当 ,当且仅当

    • 证明:

除法基本定理(Division Theorem):对任意整数 和正整数 ,存在唯一整数对 使得

其中 称为(quotient), 称为余数(remainder)。

唯一性的证明:假设存在两组 都满足条件,则 ,即 。由于 ,故 。而 的倍数,唯一满足 的整数是 ,故

素数与合数(Prime and Composite Numbers)

素数(prime number)是大于1的正整数 ,其正因子只有1和 本身。前几个素数为:2, 3, 5, 7, 11, 13, 17, 19, 23, 29, …

合数(composite number)是大于1的非素数正整数,即存在某个整数 )使得

关键性质

  • 素数有无穷多个:这是欧几里得在《几何原本》第九卷命题20中证明的。证明采用反证法:假设素数只有有限个 ,考虑 要么本身是素数(不在列表中),要么有一个素因子不在列表中(因为 除以任何 余1),矛盾。

  • 素因子性质:若 为素数且 ,则

    • 证明思路:若 ,则 ,由贝祖恒等式存在 使得 ,两边乘以 。由于 ,故

算术基本定理(Fundamental Theorem of Arithmetic)

定理:每个大于1的整数 都可以唯一地表示为素数的乘积(不计因子的排列顺序),即

其中 为素数, 为正整数指数。这称为 标准素因数分解(canonical prime factorization)。

唯一性的证明思路(反证法):

【反证法(最小反例法)】:假设存在大于1的整数可以以不止一种方式分解为素数之积。令 为最小的这样的整数。

  1. 是素数,则只有一种分解方式(自身),矛盾。
  2. 是合数。设 是两种不同的素因数分解。
  3. 由于 ,由素因子性质, 必整除某个
  4. 由于 也是素数,故
  5. 两边除以 ,得到 有两种不同的素因数分解,但 ,与 的最小性矛盾。

推论:利用标准素因数分解,可以方便地计算GCD和LCM。若

(允许某些指数为0),则

最大公约数与最小公倍数(GCD and LCM)

最大公约数(Greatest Common Divisor, GCD):两个不全为零的整数 的最大公约数 是能同时整除 的最大正整数。

最小公倍数(Least Common Multiple, LCM):两个正整数 的最小公倍数 是同时被 整除的最小正整数。

GCD与LCM的核心关系

证明:利用素因数分解,对每个素因子 ,其在 中的指数为 ,在 中的指数为 ,而 ,故乘积恢复为 ,即 的素因数分解。

互素(Relatively Prime / Coprime):若 ,则称 互素。

素因数分解实例

  • 验证:

GCD的等价定义 也可以定义为 的所有线性组合 中的最小正元素。这一定义直接联系到贝祖恒等式,也是扩展欧几里得算法的理论基础。


31.2 最大公约数

欧几里得算法(Euclidean Algorithm)

欧几里得算法基于以下关键定理:

定理(GCD递归性质):对任意非负整数 和正整数

证明

。需要证明 也是 ,即证明两个集合的正因子相同。

  1. 由除法基本定理,,其中
  2. ,则 ,故 ,即 的公因子。
  3. 反之,若 ,则 ,故 也是 的公因子。
  4. 因此 的公因子集合与 的公因子集合完全相同,它们的最大值自然相等。

伪代码(CLRS风格,使用Unicode符号):

EUCLID(a, b)
1  if b == 0
2      return a
3  else return EUCLID(b, a mod b)

执行流程图:

flowchart TD
    A(["开始"]) --> B["输入 a, b"]
    B --> C{"b == 0?"}
    C -->|"是"| D["返回 a"]
    C -->|"否"| E["递归调用 EUCLID(b, a mod b)"]
    E --> C
    D --> F(["结束"])

逐步执行实例:计算

调用aba mod b返回值
EUCLID(30, 21)30219EUCLID(21, 9)
EUCLID(21, 9)2193EUCLID(9, 3)
EUCLID(9, 3)930EUCLID(3, 0)
EUCLID(3, 0)303

因此

再计算一个实例

调用aba mod b
EUCLID(270, 192)27019278
EUCLID(192, 78)1927836
EUCLID(78, 36)78366
EUCLID(36, 6)3660
EUCLID(6, 0)60

因此

扩展欧几里得算法(Extended Euclidean Algorithm)

扩展欧几里得算法不仅计算 ,还找出整数 (称为贝祖系数,Bézout coefficients),使得

这个等式称为贝祖恒等式(Bézout identity)。

定理(贝祖定理):对任意整数 (不全为零),存在整数 使得

证明思路(基于欧几里得算法的回代):

欧几里得算法产生一系列等式:

其中 。从倒数第二个等式开始,将 表示为 的线性组合,再逐步回代,最终得到

伪代码

EXTENDED-EUCLID(a, b)
1  if b == 0
2      return (a, 1, 0)
3  else (d', x', y') ← EXTENDED-EUCLID(b, a mod b)
4      (d, x, y) ← (d', y', x' - ⌊a/b⌋ · y')
5      return (d, x, y)

执行流程图:

flowchart TD
    A(["开始"]) --> B["输入 a, b"]
    B --> C{"b == 0?"}
    C -->|"是"| D["返回 d=a, x=1, y=0"]
    C -->|"否"| E["递归调用 EXTENDED-EUCLID(b, a mod b)"]
    E --> F["获得 d', x', y'"]
    F --> G["计算 x = y'"]
    G --> H["计算 y = x' - ⌊a/b⌋ × y'"]
    H --> I["返回 d, x, y"]
    D --> J(["结束"])
    I --> J

算法返回三元组 ,其中 ,且

正确性证明

【数学归纳法(对递归深度)】:

  • 基础情况:当 时,返回 。此时 ,且 ,正确。
  • 归纳步骤:假设递归调用 EXTENDED-EUCLID(b, a mod b) 正确返回 ,满足 。由于 ,且 ,代入得: ,则 ,正确。

逐步执行实例:计算 及贝祖系数

EXTENDED-EUCLID(30, 21)
  → EXTENDED-EUCLID(21, 9)
    → EXTENDED-EUCLID(9, 3)
      → EXTENDED-EUCLID(3, 0)
        → 返回 (3, 1, 0)
      → d'=3, x'=1, y'=0
      → x = y' = 0, y = x' - ⌊9/3⌋·y' = 1 - 3·0 = 1
      → 返回 (3, 0, 1)
    → d'=3, x'=0, y'=1
    → x = y' = 1, y = x' - ⌊21/9⌋·y' = 0 - 2·1 = -2
    → 返回 (3, 1, -2)
  → d'=3, x'=1, y'=-2
  → x = y' = -2, y = x' - ⌊30/21⌋·y' = 1 - 1·(-2) = 3
  → 返回 (3, -2, 3)

验证:。正确。

再计算一个实例

EXTENDED-EUCLID(99, 78)
  → EXTENDED-EUCLID(78, 21)
    → EXTENDED-EUCLID(21, 15)
      → EXTENDED-EUCLID(15, 6)
        → EXTENDED-EUCLID(6, 3)
          → EXTENDED-EUCLID(3, 0)
            → 返回 (3, 1, 0)
          → x=0, y=1-⌊6/3⌋·0=1 → 返回 (3, 0, 1)
        → x=1, y=0-⌊15/6⌋·1=0-2=-2 → 返回 (3, 1, -2)
      → x=-2, y=1-⌊21/15⌋·(-2)=1-1·(-2)=3 → 返回 (3, -2, 3)
    → x=3, y=-2-⌊78/21⌋·3=-2-3·3=-11 → 返回 (3, 3, -11)
  → x=-11, y=3-⌊99/78⌋·(-11)=3-1·(-11)=14 → 返回 (3, -11, 14)

验证:。正确。

贝祖恒等式的推论与应用

  1. GCD的线性组合刻画 是所有形如 )的数中最小的正整数。任何 的公因子都整除
  2. 互素的等价条件 当且仅当存在整数 使得 。这一等价条件在后续的模线性方程求解中至关重要。
  3. 模逆元的存在性:若 ,则 在模 下存在乘法逆元 ,满足 。该逆元可通过扩展欧几里得算法求得。

Lamé定理

定理(Lamé, 1844):对于 ,若欧几里得算法对整数 执行了恰好 次除法(递归调用),且 是满足此条件的最小值,则

其中 斐波那契数列(Fibonacci sequence),定义为 )。

推论:对任意 ,设 的十进制位数为 ,则欧几里得算法的除法次数不超过

证明思路

【利用Fibonacci数列的增长速度】:

  1. 由Lamé定理,执行 次除法需要
  2. Fibonacci数列的增长满足 (其中 为黄金比例)。
  3. 因此 ,即
  4. 由于 ,而 位十进制数意味着
  5. (当 时)。

最坏情况实例:计算

)为例:

调用aba mod b
EUCLID(21, 13)21138
EUCLID(13, 8)1385
EUCLID(8, 5)853
EUCLID(5, 3)532
EUCLID(3, 2)321
EUCLID(2, 1)210
EUCLID(1, 0)10

共执行6次除法。 位,,满足Lamé定理的界。

欧几里得算法的迭代版本

除了递归版本,欧几里得算法也可以写成迭代形式。迭代版本避免了递归调用的开销,在实际编程中更为常用:

ITERATIVE-EUCLID(a, b)
1  while b ≠ 0
2      (a, b) ← (b, a mod b)
3  return a

迭代版本执行实例:计算

步骤aba mod b
初始3021
第1次21930 mod 21 = 9
第2次9321 mod 9 = 3
第3次309 mod 3 = 0
返回3

欧几里得算法的复杂度分析

  • 时间复杂度:由Lamé定理,除法次数为 ,其中 为较小数。由于每次除法运算的时间为 (假设整数运算为常数时间),总时间复杂度为 。若考虑大整数的实际运算成本,使用标准除法时为 ,其中 为表示 所需的位数。
  • 空间复杂度:递归版本需要 的栈空间;迭代版本仅需 的额外空间。

欧几里得算法的历史渊源

欧几里得算法是已知最古老的算法之一,可追溯至约公元前300年。它首次出现在欧几里得的《几何原本》(Elements)第七卷命题2中。欧几里得以几何的方式描述该算法——通过”反复从较大数中减去较小数”来寻找两个数的”公度”(common measure)。有趣的是,中国古代数学典籍《九章算术》中也独立出现了类似的”更相减损术”。该算法历经2300余年仍被广泛使用,堪称算法史上最伟大的成就之一。

Lamé定理与Fibonacci数列

法国数学家Gabriel Lamé于1844年证明了欧几里得算法的最坏情况分析,这是Fibonacci数列在算法分析中的首次应用。Lamé证明了:若欧几里得算法需要 次除法,则输入的两个数至少分别为 。这意味着连续的Fibonacci数对构成了欧几里得算法的最坏情况输入。Knuth后来给出了更精确的界:对于 ,除法次数不超过

扩展欧几里得算法在密码学中的应用

扩展欧几里得算法是现代密码学的核心工具之一。在RSA加密系统中,生成密钥时需要计算公钥指数 在模 下的模逆元(modular inverse),即求 使得 ,这正是扩展欧几里得算法求解贝祖恒等式的直接应用。在Diffie-Hellman密钥交换协议中,扩展欧几里得算法同样用于确保共享密钥的正确计算。几乎所有依赖模运算的公钥密码系统都离不开这一算法。

算术基本定理的唯一性

算术基本定理(又称唯一分解定理)断言每个大于1的整数都可以唯一地表示为素数的乘积。这一定理的本质可追溯到欧几里得《几何原本》第七卷命题32和第九卷命题14。Gauss在1801年的《算术研究》(Disquisitiones Arithmeticae)中首次给出了符合现代严格标准的证明。该定理是数论的基石之一,它保证了素数确实是整数世界的”原子”——所有整数都由素数唯一构建而成。


GCD与LCM的关系容易记混

GCD取的是每个素因子指数的最小值,LCM取的是最大值。一个常见的错误是混淆两者。记住:GCD是”公约数”(共同的约数),所以取”较小”的指数;LCM是”公倍数”(共同的倍数),所以取”较大”的指数。恒等式 可以帮助验证计算结果。例如

素数与不可约数的区别

在整数环 中,“素数”(prime)和”不可约数”(irreducible)是等价的概念。但在更一般的整环中,两者可能不同。一个元素 素元(prime)如果 推出 不可约元(irreducible)如果 推出 是单位。在 中两者等价,但在 等环中,存在不可约但非素的元素。算术基本定理依赖于素元与不可约元的等价性,这也是唯一分解整环(UFD)的核心特征。

扩展欧几里得算法返回的贝祖系数可以是负数

EXTENDED-EUCLID 返回的 不一定是正数。例如 返回 ,其中 是负数。这在密码学中计算模逆元时需要注意:若求 在模 下的逆元,得到 后需要取 确保结果为正。例如若扩展欧几里得返回 ,模 的逆元为 ,验证


习题精选

题号题目描述难度
31.1-1证明:若 ,则 (假设 ★☆☆
31.1-5证明:若 为正整数且 ,则 ★☆☆
31.1-6证明:,推广GCD到多个参数★★☆
31.2-2手动执行 EXTENDED-EUCLID(252, 198),验证贝祖恒等式★★☆

补充练习:利用扩展欧几里得算法求 在模 下的逆元。


视频学习指南

以下视频资源按推荐学习顺序排列,从基础概念到进阶应用:

资源名称讲者/平台内容链接
MIT 6.046J Lecture 11: Integer ArithmeticProf. Erik DemaineGCD、欧几里得算法、扩展欧几里得算法的系统讲解YouTube
3Blue1Brown: The Fibonacci sequence and the Euclidean algorithm3Blue1Brown可视化展示Fibonacci数列与欧几里得算法最坏情况的联系YouTube
Khan Academy: Euclidean algorithmKhan Academy欧几里得算法的基础讲解与练习Khan Academy
Michael Penn: The Extended Euclidean AlgorithmMichael Penn扩展欧几里得算法的详细推导与实例YouTube

学习建议:建议先观看Khan Academy的基础视频建立直觉,再通过3Blue1Brown的可视化理解Fibonacci数列与最坏情况的联系,最后通过MIT OCW课程获得严谨的理论框架。


CLRS教材原文

关于整除性的定义(31.1节): “We say that if there exists an integer such that . We also say that divides , is a divisor of , and is a multiple of .”

关于算术基本定理(31.1节): “A composite number can be factored uniquely into prime numbers. More precisely, theorem 31.9 states that every integer greater than can be written uniquely as a product of primes in nondecreasing order.”

关于欧几里得算法(31.2节): “The Euclidean algorithm is based on the following theorem: For any nonnegative integer and any positive integer , .”

关于扩展欧几里得算法(31.2节): “The EXTENDED-EUCLID procedure is a variation of the Euclidean algorithm. In addition to computing , it also computes integers and satisfying the equation .”


参见Wiki

第31章-数论算法