辗转相除法(欧几里得算法)的证明

欢迎访问我的主页: https://heeheeaii.github.io/

辗转相除法是一种用于计算两个非负整数最大公约数的有效算法。它的证明主要分为两个部分:

  • 证明核心引理: gcd(a,b)=gcd(b,amodb)
  • 证明算法的收敛性: 证明算法一定会在有限步内结束。

辗转相除法简介

在开始证明之前,先回顾一下辗转相除法的步骤。对于任意两个正整数 a 和 b (不妨设 a>b):

  1. 用 a 除以 b,得到商 q 和余数 r。即 a=qb+r,其中 0≤r<b。
  2. 如果余数 r 为 0,那么 b 就是 a 和 b 的最大公约数。
  3. 如果余数 r 不为 0,则将原来的除数 b 作为新的被除数,将余数 r 作为新的除数,重复第一步。

如此循环,直到余数为 0。此时,最后一次计算中的除数就是原始 a 和 b 的最大公约数。

引理: 设 a,b 为两个正整数,且 a=qb+r(其中 q 为商, r 为余数,0≤r<b),那么 a 和 b 的最大公约数等于 b 和 r 的最大公约数。即:gcd(a,b)=gcd(b,r)。

证明过程:

为了证明这个等式,只需要证明 (a,b) 的公约数集合与 (b,r) 的公约数集合是完全相同的。如果两个集合完全相同,那么它们各自的最大元素(即最大公约数)也必然相等。

1. 证明:任何 (a,b) 的公约数 d,也一定是 (b,r) 的公约数。

假设 d 是 a 和 b 的一个任意公约数。根据公约数的定义,有 d∣a 和 d∣b。(这里的 ∣ 表示"整除")。

因为 d 能整除 a 和 b,所以 d 也能整除它们的任意线性组合。将算法中的等式 a=qb+r 变形为 r=a−qb。因为 d∣a 且 d∣b,所以 d 必然能整除 a−qb。因此,得到 d∣r。

既然已知 d∣b 且证明了 d∣r,那么 d 就是 b 和 r 的一个公约数。

2. 证明:任何 (b,r) 的公约数 d′,也一定是 (a,b) 的公约数。

假设 d′ 是 b 和 r 的一个任意公约数。根据定义,有 d′∣b 和 d′∣r。

因为 d′ 能整除 b 和 r,所以 d′ 也能整除它们的任意线性组合。从算法等式 a=qb+r 中,可以看到 a 正是 b 和 r 的一个线性组合。因为 d′∣b(所以 d′∣qb)且 d′∣r,所以 d′ 必然能整除 qb+r。因此,得到 d′∣a。

既然已知 d′∣b 且证明了 d′∣a,那么 d′ 就是 a 和 b 的一个公约数。

1. 算法为什么一定会终止?

在辗转相除法的每一步中,都有一个等式: ri−1=qi⋅ri+ri+1

其中 ri−1 是被除数,ri 是除数,ri+1 是余数。根据整数除法的性质,余数必须严格小于除数,且不能为负数。所以得到一个余数序列: b>r1>r2>r3>⋯>rn≥0

这是一个由非负整数组成的严格递减序列。任何由非负整数组成的严格递减序列最终必然会达到 0。因此,算法一定会在有限步内终止,即一定会出现某一步的余数 rn+1=0。

2. 为什么余数为 0 时,当时的除数就是最大公约数?

根据核心引理,可以将求 gcd(a,b) 的过程转化为一个链条: gcd(a,b)=gcd(b,r1)=gcd(r1,r2)=⋯=gcd(rn−1,rn)

当算法进行到最后一步时,余数为 0。假设这一步的表达式为: rn−1=qn+1⋅rn+0

这表示 rn 能够整除 rn−1。那么,需要求解的就是 gcd(rn−1,rn)。根据最大公约数的定义,一个数 (rn−1) 和它的约数 (rn) 的最大公约数就是那个约数本身 (rn)。 所以,gcd(rn−1,rn)=rn。

将这个结果代入上面的等式链条,得到: gcd(a,b)=gcd(rn−1,rn)=rn

这里的 rn 正是算法终止前的最后一个非零余数,也就是最后一步计算中的除数。

举例说明:

用 gcd(1071,462) 来演示这个过程:

  • 1071=2⋅462+147 根据引理:gcd(1071,462)=gcd(462,147)
  • 462=3⋅147+21 根据引理:gcd(462,147)=gcd(147,21)
  • 147=7⋅21+0 根据引理:gcd(147,21)=gcd(21,0) 此时余数为 0,算法终止。最后一步的除数是 21。

把整个链条连起来: gcd(1071,462)=gcd(462,147)=gcd(147,21)=21

所以,1071 和 462 的最大公约数是 21。

相关推荐
CHEN5_0211 小时前
【leetcode100】和为k的子数组(两种解法)
java·数据结构·算法
Codeking__11 小时前
DFS算法原理及其模板
算法·深度优先·图论
Victory_orsh12 小时前
“自然搞懂”深度学习系列(基于Pytorch架构)——01初入茅庐
人工智能·pytorch·python·深度学习·算法·机器学习
88号技师12 小时前
2025年8月SCI-汉尼拔·巴卡优化算法Hannibal Barca optimizer-附Matlab免费代码
开发语言·人工智能·算法·数学建模·matlab·优化算法
龙腾AI白云12 小时前
大模型-高效优化技术全景解析:微调 量化 剪枝 梯度裁剪与蒸馏 上
算法
地平线开发者12 小时前
新版 perf 文件解读与性能分析
算法·自动驾驶
lingran__12 小时前
算法沉淀第五天(Registration System 和 Obsession with Robots)
c++·算法
chrispang12 小时前
浅谈 Tarjan 算法
算法
莱茶荼菜12 小时前
一个坐标转换
c++·算法
西阳未落13 小时前
多模态实体识别:跨越模态鸿沟的智能技术
算法