最大公因数
正的整数 是 的最大公因数,须同时整除两个数,并且两个数的每一个共同因子都整除 。这里的因子是共同因子,不能只属于其中一个数。本站把范围明确为 不同时为零;正数约定避免把 与 混淆。
杰瑞和太一 · 哔哩哔哩 · 8:08
本课从最大公因数和整除关系出发,随后在正整数 的范围内展开。对于 ,原最大公因数仍是新数对的公因数,且新数对的任意公因数都不超过它,由此证明 。连续余数链进一步对应到迭代式 C++ 实现。完整例题用1160718174与316258250作输入,经过10次带余除法得到1078。笔记明确区分原片证明与本站补充的输入范围、立即整除边界及正整数下降的有限性说明。
在学习检查器中查看要点和时刻,或切换阅读标签查看完整笔记。
依据视频画面与讲解整理,并非逐字语音转写。
这一段先建立主题:视频要讨论的是“最大公因子 (Greatest Common Divisor)”,并预告后续会介绍欧几里得算法。标题页同时给出欧几里得的历史背景,说明这一概念与古典数论传统相关。
最大公因数的两条条件分别说明是否为共同因子与是否满足最大性: 同时整除 ,且两个数的任意共同因子都整除 。这里必须理解为共同因子;只整除其中一个输入的数不在条件内。本站还把正数约定与输入不同时为零的范围明确写出。
对于不同时为零的整数 , 是共同正因子中的最大值。输入变号不会改变共同因子,所以 。同时为零时不能用这个最大值定义;这项边界是本站补充的范围说明。
最后,视频补充记号层面的关键点:整除符号“|”有方向,k|a 表示左边的 k 整除右边的 a,等价于存在整数 m 使 。这里特别强调左右项分别是除数和被除数,避免初学者把整除关系读反。
本段继续解释整除记号: 表示存在整数 使 。定义中的第二条件针对共同因子,而不是只整除一个输入的因子。本站明确最大公因数为正整数、输入不同时为零;取输入绝对值不改变共同因子。
页面切到“欧几里得算法的证明”。这里先固定问题:求整数 a 和 b 的最大公因子,并假设 。接着把最大公因子记成 d,于是立刻得到三条基础事实:d|a、d|b、。这三条不是新定理,而是直接从前面关于最大公因子的定义中取出来的前提,后面所有推导都会围绕它们展开。
下一步引入带余除法。屏幕上写出 ,并注明 、。为了让符号落地,视频把公式中的四项分别命名:a 是被除数, 是商,b 是除数, 是余数;画面上还依次弹出四个标注框,把术语和符号一一对齐。这里的数学作用很明确:它把原来的数对 (a,b) 转换成新的数对 (b,),为后面比较两组最大公因子做准备。
数轴把 具体化为 。60是前一个15的倍数,70比它多10,所以余数是10;60到75是完整步长15。余数表示超过前一个倍数的距离,而不是到下一个倍数还差的距离。
最后回到证明页,视频提出欧几里得算法的核心命题:a 和 b 的最大公因子等价于 b 和 的最大公因子。紧接着开始“小心论证”的第一半:由 ① d|a 和 ② d|b,可知 d 整除 ;再根据带余除法 ,得到 ④ 。于是 d 同时整除 b 和 ,所以 d 是 b 与 的公因子。片段到此结束,后面还应继续论证最大性以及反方向包含关系,才能完成 的完整证明。
继续证明 。当前整数条件为 ,且 、。原最大公因数记作 ;后面分别证明它仍是新数对的共同因子,以及新数对的任意共同因子都不超过它。
接下来先证明一个方向。因为 ,所以 且 。整除关系对线性组合封闭,因此 d 也整除 。再由 可得 ,于是 。把 与 合起来,就说明 d 同时是 b 和 的公因子。这一步解决的是“原来的最大公因子 d 至少还是新数对的公因子”。
然后证明最大性,也就是另一个方向。任取整数 c,使 c 是 b 和 的一个公因子,即 且 。仍然利用整除对线性组合封闭,得到 。由于 ,所以 。再结合 ,可知 c 也是 a 和 b 的公因子。因为 是 a、b 的最大公因子,所以任何这样的 c 都必须满足 。
最后把两部分拼起来:前面已经证明 d 本身是 b 和 的公因子,现在又证明 b 和 的任意公因子 c 都不超过 d。于是 b 和 的最大公因子正好就是 d,即 。这就完成了 的证明,页面上以“证毕”收束。
片段末尾画面切换到下一页,标题变成“3、证明后的思考”。这说明正式证明已经结束,视频准备进入后续讨论;不过本片段只拍到新标题出现,尚未展开这一节的实质内容。
这一页标题是“3、证明后的思考”,作用不是重新证明,而是把欧几里得算法的关键思想压缩成一句可记忆的替换规则。
视频首先指出:求 时,可以把问题转换成求 ,其中 是 a 除以 b 的余数。
这条规则写成公式就是 。这里 a 是被称作“大数”的输入,b 是“小数”的输入,a mod b 就是第一次带余除法的余数。
接下来视频解释这样做的意义:原来的“两个数求最大公因子”问题,被化成了“较小的数和余数求最大公因子”问题,所以问题规模变小了。
如果把这个过程反复执行,一直做到不再产生余数为止,这正是“辗转相除”的含义,因此欧几里得算法也被称为“辗转相除法”。
右侧的公式把这一迭代过程完整展开:,,,依此类推,每一步都保持“被除数=商×除数+余数”的形式。
从这些式子可以看出,gcd 的参数对在不断替换:先是 (a,b),然后是 (b,),再是 (, ),一直到 (, ),最后落到 (, )。
终止标志出现在倒数第二行:。这说明 能整除 ,迭代到此停止。
于是视频给出结论:最大公因子 d 就等于最后一个非零余数 ,即 。注意答案不是最后的 0,而是 0 前面的那个 。
这一页先把欧几里得算法的本质收束成一句话:它不是直接硬算最大公因数,而是在做一种“变换”。屏幕上右侧给出连续的带余除法式子,从 开始,接着 ,再到 ,一路写到最后 。左侧文字同时点明其意义:把“求两个数的最大公因数”不断化成“求较小数和余数的最大公因数”,也就是 。这里的数学依据就是带余除法和最大公因数的递推性质,结果是问题规模逐步变小。下一步自然要问:什么时候停?答案写在最后一行,余数为 0 时,最后一个非零余数 就是 。
接着画面切到 C++ 实现页,把刚才的数学递推翻译成程序。函数签名是 int greatestCommonDivisor(int a, int b),注释明确写出参数要求 ,讲解者也提醒这一步需要调用者自己控制。函数体先算 int ,也就是初始余数;然后进入 while() 循环。循环里依次执行 ; ; ;,这三句正好对应数学上的数对替换:旧的除数变成新的被除数,旧的余数变成新的除数,再算一次余数。屏幕上的注释 就是在说明这种对应关系。因为循环条件是 ,所以当余数第一次变成 0 时退出,此时返回的 b 正是最后一个非零余数,也就是最大公因数。页面底部还注明运行环境为 VS2019。
随后进入测试用例页,先用程序验证实现是否正确。代码中给出具体输入 、,并调用 greatestCommonDivisor(a,b)。下方的调试窗口显示函数已经返回 1078,变量 gcd 的值也是 1078。这一步的作用是确认前面那段 C++ 代码在真实大整数样例上能运行并输出结果。紧接着,视频并不满足于只看程序黑箱返回值,而是继续把同一个例子展开成手算过程,检查它到底经过了多少次辗转相除。
最后一张表把示例的十轮迭代完整列出。第一行是 ,于是 gcd 化为 ;第二行 ;第三行 ;之后依次得到 1587894、137984、70070、67914、2156、1078。到第九行时是 ,第十行则是 。按照前面讲过的终止规则,余数为 0 时答案是最后一个非零余数,所以 。表中十次带余除法与程序输出一致。表格与结论保留到结尾,随后讲解结束。
正的整数 是 的最大公因数,须同时整除两个数,并且两个数的每一个共同因子都整除 。这里的因子是共同因子,不能只属于其中一个数。本站把范围明确为 不同时为零;正数约定避免把 与 混淆。
对不同时为零的整数 ,最大公因数是同时整除它们的最大正整数。给输入变号不会改变共同因子,所以可以先取绝对值。本站明确排除同时为零的情形:该情形不能使用这个最大值定义。
视频强调整除记号“|”区分除数和被除数:在 k|a 中,左边 k 是除数,右边 a 是被除数,等价于 。
正整数 是两个输入的共同因子,且它们的任何共同正因子都整除 。共同因子不是只整除其中一个数的因子;本站明确输入为不同时为零的整数。
最大公因数是共同正因子中的最大值。本站明确输入不同时为零,避免同时为零时集合没有最大值。
k|a 读作“k 整除 a”,其含义是存在整数 m 使 。视频特别提醒:竖线左边是除数,右边是被除数,不能记反。
输入变号不改变共同因子,因此对不同时为零的整数,最大公因数可在取绝对值后计算。
证明开始时先不失一般性地假设 ,并把 a、b 的最大公因子记为 d。由此立即得到 d|a、d|b 和 三条基础事实。
视频用带余除法把 a 分解成商倍除数加余数:,其中 ,且 。四项名称分别是被除数、商、除数、余数。
在一般图 中,a 落在 qn 与 ()n 之间,余数 r 就是从 qn 到 a 的那一段长度。例子 中,60 到 70 的距离 10 正是余数。
关键恒等式是 。论证先说明d同时整除b和;紧接着的证明再说明,新数对的任意公因子也整除原输入,因此不超过d。
视频先把问题限定为整数 a、b,且假设 。记 ,并用除法定义引入 、,使得 ,。整个证明的目标是说明把 (a,b) 替换成 (b,) 后,最大公因子不变。
由 得到 、。因为整除对线性组合封闭,所以 。又 ,故 。再结合 ,可知 d 同时是 b 和 的公因子。这一步建立了“旧最大公因子仍属于新数对的公因子集合”。
任取 c 为 b 与 的公因子,则 、,因此 。由于 ,得到 ;再结合 ,可知 c 也是 a、b 的公因子。因为 ,所以 。这一步说明新数对的任何公因子都不会超过原来的最大公因子。
把两个方向合并:一方面 本身是 b、 的公因子;另一方面 b、 的任意公因子 c 都满足 。于是 b、 的最大公因子正好等于 d,即 。这就是欧几里得算法一步化归的正确性。
分析员补充:这段证明的关键不在一个固定变形,而在两个方向分别使用不同线性组合。第一方向用 ,把 a、b 的公因子传递到 b、;第二方向用 ,把 b、 的公因子传回 a、b。理解这两个方向的差别,有助于避免把证明误记成单步恒等变形。
沿用前文正整数 的条件,先求 除以 的余数,再把输入换成除数与余数。这保持最大公因数,并使继续迭代时的正余数变小。
每轮把前一轮除数作为新被除数,把前一轮余数作为新除数,直到余数为0。原片用问题规模缩小说明这一过程;本站补充有限性理由:继续迭代的余数是严格递减的正整数,因此不可能无限下降。若第一轮已经整除,立即返回初始除数。
右侧公式展示了完整迭代结构:, , , …, , 。每一行都是标准的带余除法,余数严格下降,最终出现 0 作为终止信号。
当迭代进行到 时,说明 整除 ,过程结束。视频最后明确写出 ,因此最大公因子是最后一个非零余数 ,而不是终止时出现的 0。
视频把欧几里得算法概括为一种反复“变小”的过程:不直接求 a 与 b 的最大公因数,而是利用带余除法把问题化为求 b 与余数 r 的最大公因数。公式页明确写出 ,并把它称为“辗转相除法”。这一步的关键是每次都用上一轮的除数和余数组成新的数对。
当连续带余除法进行到某一步余数为 0 时,算法停止。此时答案不是 0,而是上一步中的较小数,也就是最后一个非零余数 。公式页最后写成 ,因此 。
代码页给出函数 int greatestCommonDivisor(int a,int b)。先计算 ,在 时依次执行 、 和 。这些赋值把余数不变量转化为程序状态更新。循环结束后返回 b,即最后一个非零余数。原片注释给出 ,演示使用 VS2019。输入是int范围内的正整数,除数非零;若初次已整除,函数立即返回初始除数b。
视频用 、 作为测试输入,调用 greatestCommonDivisor(a,b)。调试窗口显示函数返回 1078,变量 gcd 也为 1078。这个环节的作用是验证前面代码实现能够正确运行,并给出一个可核对的具体答案。
按知识点查看条件、步骤和证据。补充解释与视频直接内容分别标明。
幻灯片上出现 max {k | k|a 且 k|b} 以及 。
讲解者提到“最大公因子”并读出等价定义。
gcd(a, b)
a 和 b 的最大公因子
整数输入不同时为零;最大公因数及共同因子按正整数处理(本站明确范围)
幻灯片定义中使用字母 a、b、c 表示整数及其公因子。
a, b, c
a 和 b 为待求最大公因子的整数,c 为其最大公因子候选
整数输入不同时为零;最大公因数及共同因子按正整数处理(本站明确范围)
幻灯片使用 k|a 与 k|b 表示整除关系。
讲解者专门说明整除记号中谁是被除数、谁是除数。
|
整除符号;k|a 表示 k 整除 a
整数之间的整除关系
等价定义写作 max {k | k|a 且 k|b}。
k
同时整除 a 和 b 的公因子
整数输入不同时为零;最大公因数及共同因子按正整数处理(本站明确范围)
幻灯片给出 。
|a|, |b|
a 和 b 的绝对值
实数/整数上的绝对值
幻灯片正文写出 ,并在 Notes 中写出 k | a 与 。
原音解释:k 整除 a 等价于 a 等于 m 倍的 k。
a, b
被讨论最大公因子的两个整数。
整数;在后续证明页中进一步限定为 。
第一页定义句为称 c 为 a 和 b 的最大公因子。
c
候选的最大公因子。
正整数;整数输入不同时为零(本站范围明确)
页面写出 max{k, 其中 k|a 且 k|b},Notes 又写出 k|a。
讲解者解释整除记号|的左右项角色。
k
同时整除 a 与 b 的公因子候选。
共同正因子;整数输入不同时为零(本站范围明确)
Notes 中给出 。
讲解者把 k|a 读作a 等于 m 倍的 k。
m
使 成立的倍数。
整数。
第二页写记 d 为 a 和 b 的最大公因子,并列出 。
原音说明:记 d 为 a 和 b 的最大公因子。
d
a 与 b 的最大公因子。
正整数。
页面写出 ,且 floor()。
原音说明: 称它为商。
152秒出现商的标注,指向。
q₁
带余除法中的商。
整数。
页面写出 。
原音说明: 的值介于 0 和 b 之间 称它为余数。
157秒出现余数标注,指向。
r₁
a 除以 b 的余数。
整数,满足 。
幻灯片标题为“1、定义最大公因子 (Greatest Common Divisor)”,并列出两条判定条件。
讲解者逐条解释条件一和条件二。
本站将共同因子、正数约定及不同时为零的范围写清;未把补充条件归作原片原话。
必须是 的共同因子,且两个数的任何共同因子都整除 。这区分是否为公因子与是否满足最大性;不把只整除其中一个输入的数纳入第二条件。本站补充 、输入不同时为零的明确范围。
整数 不同时为零(本站范围说明)
是正整数,且同时整除
任意共同正因子都整除
幻灯片写出 max {k | k|a 且 k|b},并进一步写出 。
讲解者说明因为所求最大公因子是正数,所以可化为绝对值形式。
本站将共同因子、正数约定及不同时为零的范围写清;未把补充条件归作原片原话。
以共同正因子的最大值定义 ,可以看出输入变号不影响公因子结构;所以取绝对值保持最大公因数。本站明确限定输入不同时为零。
整数 不同时为零(本站明确排除无法取最大值的情况)
是同时整除 的正整数
幻灯片底部 Notes 说明整除记号“|”区分谁是被除数、谁是除数,并举例 k|a 等价于 。
讲解者口头强调整除记号的左右项角色。
视频专门说明整除记号“|”的方向:左边是除数,右边是被除数。以 k|a 为例,它等价于存在整数 m 使 。
用于整数间的整除关系
左侧是除数,右侧是被除数
第一页标题为1、定义最大公因子 (Greatest Common Divisor)。
正文列出两条:1. c 是 a 和 b 的因子;2. a 和 b 的任何因子都是 c 的因子。
正整数 是两个输入的共同因子,且它们的任何共同正因子都整除 。共同因子不是只整除其中一个数的因子;本站明确输入为不同时为零的整数。
整数输入不同时为零;最大公因数取正值(本站范围说明)
第二条件量化两个输入的共同正因子
页面写出以下是一个等价定义: max {k, 其中 k | a 且 k | b}。
最大公因数是共同正因子中的最大值。本站明确输入不同时为零,避免同时为零时集合没有最大值。
整数输入不同时为零(本站明确范围)
候选为共同正因子
第一页黄色文字写出 。
视频直接给出一个性质链:改变 a、b 的符号不会改变最大公因子,因此可把讨论归约到非负绝对值情形。
整数输入不同时为零(本站范围说明)
Notes 写整除记号 ‘|’ 区分谁是被除数,谁是除数的问题。例如 k | a 等价于 。
原音说明:k 整除 a 等价于 a 等于 m 倍的 k。故而左手项是除数,右手项是被除数。
视频专门解释竖线记号的方向性:左侧是除数,右侧是被除数;k|a 的含义是存在整数 m 使 。
k、a、m 为整数。
视频强调这是记忆要点,不是推导。
第二页标题为2、欧几里得算法的证明。
正文写求整数 a 和 b 的最大公因子,不妨假设 ,记 d 为 a 和 b 的最大公因子。
原音说明:下面正式开始证明欧几里得算法……不妨假设 a 大于等于 b 大于 0。
视频进入证明时先固定目标:求整数 a 与 b 的最大公因子;再作不失一般性的排序假设 ,并把最大公因子记为 d。
a、b 为整数。
证明页明确假设 。
页面写由除法的定义,可以得到:。( floor(), 。)
原音解释带余除法等式、向下取整的商以及余数非负且小于除数的范围。
149至158秒依次出现被除数、商、除数和余数标注。
视频把证明中的关键工具定义为带余除法:a 被写成 ,其中 是商, 是余数,且余数严格小于除数 b。画面还用标注框把 a、、b、 分别命名为被除数、商、除数、余数。
用于 的整数除法场景。
视频未单独证明该除法定义,只是直接引用。
幻灯片标题为“2、欧几里得算法的证明”,正文开头写有“求整数 a 和 b 的最大公因子,不妨假设 ,记 d 为 a 和 b 的最大公因子”。
讲解者在这一段围绕 d 对 a、b 的整除性以及后续推导展开说明。
本片段进入“欧几里得算法的证明”部分,先把问题设定为:给定整数 a 和 b,且不妨假设 ;记 d 为 a 和 b 的最大公因子。随后由除法定义引入商 和余数 ,建立 a 与 b、 之间的关系,为证明 做准备。
a、b 为整数
视频中明确假设
与 由除法定义给出
幻灯片写有“∵式和②式,∴ …④”以及“∵②式和④式,∴ d 同时是 b 和 的公因子”。
原音把最大公因数对两个输入的整除性用于差的线性组合,得到它整除余数,因而也是新数对的共同因子。
这一方法先利用 得到 与 ,再利用整除对线性组合封闭的性质,推出 。由于 ,于是 。再结合 ,就得到 d 同时是 b 和 的公因子。这一步证明了“公共因子集合的一个元素 d 属于 (b,) 的公因子集合”的方向。
已设定
已使用
使用整除对线性组合封闭的性质
证明下半页任取新数对的共同因子c,用恢复c对a的整除性;c也是原数对的共同因子,所以。结合d本身整除b与,最后得到新数对的最大公因数等于d。
原音依次解释任取c、通过和的线性组合恢复c整除a、比较c与原最大公因数d,最后合并前半段得到相同最大公因数。
在完成“d 是 b 与 的公因子”之后,视频继续证明最大性:任取 b 与 的一个公因子 c,则 且 ,因此 c 整除它们的线性组合 。由于 ,得到 ;又已知 ,所以 c 也是 a 与 b 的公因子。因为 ,任何 a、b 的公因子都不超过 d,故 。再结合前面已证 d 本身是 b、 的公因子,可知 b、 的最大公因子正好等于 d。
任取 c 为 b 与 的公因子
使用
使用 的最大性定义
页面新增黄色文字大胆假设:a 和 b 的最大公因子等价于 b 和 的最大公因子。
原音说明:下面不妨进行大胆假设,a 和 b 的最大公因子等价于 b 和 的最大公因子。
片段结束时只提出这一待证命题,未给出完整证明。
在当前设定下,视频提出待证命题: 等价于 。
a、b 为整数。
。
,且 。
针对满足上述条件的整数 a、b 及其带余除法余数 。
幻灯片先写“大胆假设:a 和 b 的最大公因子等价于 b 和 的最大公因子”,随后通过两段论证得到“c_max = 。证毕。”
讲解者在结尾明确说“c_max就是b和的最大公因子,证毕”。
在整数 a、b 满足 ,且 、 的条件下,有 。
a、b 为整数
对满足上述条件的整数 a、b、、 成立;证明中对“任意公因子 c”使用全称论证。
左侧明确写出 mod b)。
讲解者口头复述为“a和b的最大公因子等于b和余数的最大公因子”。
在该片段语境下,。
整数 ,沿用原片此前证明条件
余数由正除数带余除法确定
此前双向公因数与最大性证明支持此处不变量总结
针对视频讨论的一对整数输入 a,b。
右侧最后一行写 ,且上一行 。
讲解者说“而 r n减1和 r n它是可以发生整除的。那么 d 也即最大公因子就记为 r n。”
若连续带余除法进行到 ,则 。
存在如图所示的连续带余除法链。
是最后一个非零余数。
能被 整除。
针对该余数链终止时的情形。
原音明确区分终止的零余数与给出答案的最后正除数。
公式页写有 与 。
在欧几里得算法的辗转相除序列中,当某一步余数为 0 时,前一步的较小数 等于原两数的最大公因数。
已经按欧几里得算法连续作带余除法
是最后一个非零余数
对满足算法过程的整数 a,b 成立
左侧文字写有 。
代码注释写有 //辗转相除 。
求 a 与 b 的最大公因数可以转化为求 b 与 a 除以 b 的余数之间的最大公因数。
a,b 为整数
视频代码页要求
对适用输入成立
实际末帧表格从 起,共10行除法;末行是 ,其中 、。
原音统计十轮演算并给出结果1078。
对于示例输入 、,视频给出的手算过程共进行 10 轮带余除法,最终得到最大公因数 1078。
使用该具体测试样例
对该数值例子成立
页面列出由已知条件可以得到:d | a …①,d | b …②, …③。
讲解者逐条读出这三项。
因为 d 被记为 a 和 b 的最大公因子,所以 d 首先必须是 a 的因子。
使用前面给出的最大公因子定义中的“公因子”条件。
同理,d 也必须是 b 的因子。
使用最大公因子定义中的“公因子”条件。
页面把这一记号本身列为第③条,作为后续论证的出发点。
来自证明设定“记 d 为 a 和 b 的最大公因子”。
得到三条编号事实 ① d|a、② d|b、③ ,为后续比较 与 做准备。
页面小心论证下写出∵①式和②式,∴ …④。
下一行写出∵②式和④式,∴ d 同时是 b 和 的公因子。
讲解者说到小心论证,根据一式后片段结束。
片段只展示这一半方向的开头,未展示完整收尾,也未展示反方向论证。
先引用前面已建立的 ① 和 ②。
来自最大公因子定义。
由于 d 同时整除 a 和 b,它也整除 a 减去 倍 b 的线性组合。
使用整除对线性组合封闭的标准性质;视频未口头展开这一原理名称。
由带余除法定义 ,移项可得 。
使用前面给出的除法定义。
把上一步代入,得到 d 整除 ,这就是页面中的 ④。
等量代换。
结合 ② 与新得到的 ④,说明 d 同时是 b 与 的公因子。
公因子定义。
片段内可见的结论止于“d 同时是 b 和 的公因子”;要完整证明 ,还需要继续论证最大性以及另一方向,这些在本片段中未出现。
证明上半页列出d整除a和b、以及,并用差的线性组合把整除性传递到;接着说明d同时整除b和。
讲解者口头复述了这些步骤,并把 说成 a 和 b 的线性组合。
由 d 是 a 和 b 的最大公因子,先得到 d 分别整除 a 与 b。
视频幻灯片中的已知条件①、②。
引入除法定义,把 a 写成商乘 b 加余数。
视频幻灯片中的除法定义。
因为 d 同时整除 a 和 b,所以 d 整除 a 与 b 的线性组合 。
整除对线性组合封闭;原片使用差的线性组合。
由 可得 ,因此 d 整除 。
代数变形与等量替换。
把 d|b 与刚得到的 合并,得出 d 同时是 b 和 的公因子。
公因子的定义。
已完成证明的第一半: 必为 b 与 的公因子。
证明下半页任取新数对的共同因子c,用恢复c对a的整除性;c也是原数对的共同因子,所以。结合d本身整除b与,最后得到新数对的最大公因数等于d。
讲解者逐句朗读并解释这一段,最后说“证毕”。
任取整数 c 作为 b 与 的一个公因子。
原片任取新数对共同因子c的设定。
由于 c 整除 b 和 ,所以 c 整除它们的线性组合 。
整除对线性组合封闭;原片使用和的线性组合。
根据除法定义 ,把线性组合替换为 a,得到 c 整除 a。
等量替换。
把 c|a 与 c|b 合并,得到 c 也是 a 与 b 的公因子。
公因子的定义。
因为 ,而 c 是 a、b 的任一公因子,所以 c 不超过最大公因子 d。
最大公因子的最大性定义;原片根据原最大公因数比较任意共同因子c。
前一半已证 d 本身是 b、 的公因子;现在又证任意公因子 c 都满足 ,所以 b、 的最大公因子就是 d。
结合两半证明与最大性的定义。
完成证明的第二半,得到 ,即欧几里得算法一步化归的正确性。
右侧方程组逐行列出 , , , …, , , 。
原音沿相邻数对解释从原输入转为除数与余数,并重复同一转换,直到相邻末项整除。
视频先把原问题 改写为 ,其中 是 a 除以 b 的余数。
依据左侧已给出的核心变换 。
接着把 再改写为 ,其中 是 b 除以 的余数。
对新的参数对重复同一条“被除数、除数、余数”的带余除法变换。
省略号表示重复同一规则:上一轮的除数除以上一轮的余数,得到下一轮余数。
右侧连续等式和讲解中的“不断进行循环迭代”共同表明这是同一规则的重复应用。
讲解者把倒数阶段表述为:想求 和 的最大公因子,可以等价地转为求 和 的最大公因子。
余数不变量加上最大公因数的交换对称性,支持原片末句交换后的数对;这里的对称性解释为本站补充。
最后一步显示 除以 的余数为 0,即 整除 。
末行的零余数等式直接说明最后一个非零余数整除上一项。
由于迭代一直化约到最后一个非零余数 ,视频据此把最大公因子记为 。
右侧最后一行直接写出 ;这是前面逐步替换链条的终点。
视频以直观迭代方式说明:连续做带余除法会把 一路化约到最后一个非零余数 ,因此 。
右侧公式依次写出 , , , , q_nr_{n-1}+, , ,并标注 , , , 。
原音以最后一次整除总结最大公因数的位置。
视频在这一小段中没有完整口述每一步为何余数严格递减,只给出了公式链和结论。
先用 a 除以 b,得到第一个余数 。
视频公式页直接给出的带余除法第一步。
再用 b 除以 ,得到下一个更小的余数 。
视频公式页直接给出的第二步。
继续把上一轮的除数与余数作带余除法。
视频公式页以省略号表示该过程持续进行。
经过若干步后得到最后一个非零余数 。
视频公式页给出的倒数第二步。
下一轮除法余数为 0,说明算法终止。
视频公式页给出的终止等式。
因此原两数的最大公因数就是最后一个非零余数 。
视频公式页与讲解者口述共同给出的结论。
欧几里得算法通过不断把数对替换为“除数、余数”来缩小问题规模,直到余数为 0,此时最后一个非零余数就是最大公因数。
代码页显示 int ; while () { ; ; ; } return b; 以及注释 //辗转相除 。
原音把余数零的退出条件和三句赋值更新对应到保持最大公因数的数对转换。
先计算初始余数 r。
对应带余除法 中的 。
只要当前余数不为 0,就继续迭代。
对应视频所述终止条件“余数为零时停止”。
把旧的除数变成新的被除数,把旧余数变成新的除数。
对应数学上的数对替换 (a,b)。
在新的数对上重新计算余数。
对应下一轮带余除法。
循环结束时返回当前的 b。
此时 b 正是最后一个非零余数,即最大公因数。
这段 C++ 代码是欧几里得递推关系的直接迭代实现:每次更新 (a,b,r) 就是在执行 。
下方示例写例子:。
数轴以15为步长;从60到75的上方括号标15,从60到70的下方括号标10。原帧170秒可直接核对。
原音以说明70是被除数、4是商、15是除数、10是余数。
用数轴说明 中被除数、商、除数、余数的位置关系。
被除数为 70。
除数为 15。
商为 4。
余数为 10。
把抽象公式 对应到具体数值和数轴区间。
先把 70 分解成 4 个完整的 15 再加剩余 10。
带余除法定义。
数轴上以 15 为步长标出倍数点,,。
图中刻度直接给出。
70 落在 60 与 75 之间,距前一个 15 的倍数 60 的长度为 10,这就是余数。
图示括号标注。
70 是被除数,4 是商,15 是除数,10 是余数。
余数 10 满足 ,与页面一般规则 一致。
代码页显示 int , ; int gcd = greatestCommonDivisor(a, b);。
调试窗口显示 greatestCommonDivisor 返回 1078,gcd=1078。
原音报告程序输出为1078。
调用 greatestCommonDivisor(a,b) 计算 与 的最大公因数。
使用前面给出的 C++ 函数
求 的程序输出值。
把给定整数传入函数。
测试用例代码直接给出。
调试窗口显示函数返回值为 1078。
视频画面中的变量监视窗口直接给出结果。
1078
视频随后用手算表复核,得到同样的结果 1078。
表格逐行给出 ;;;;;;;;;。
原音报告该演算十轮,得到1078。
对 、 逐步执行欧几里得算法,验证最大公因数。
求 ,并统计迭代轮数。
第一轮带余除法,得到余数 211943424。
手算表第一行。
第二轮把上一轮的除数和余数继续相除。
手算表第二行。
第三轮得到余数 3313772。
手算表第三行。
第四轮得到余数 1587894。
手算表第四行。
第五轮得到余数 137984。
手算表第五行。
第六轮得到余数 70070。
手算表第六行。
第七轮得到余数 67914。
手算表第七行。
第八轮得到余数 2156。
手算表第八行。
第九轮得到余数 1078。
手算表第九行。
第十轮余数为 0,算法终止。
手算表第十行。
最后一个非零余数是 1078,所以最大公因数为 1078。
由终止规则 得出。
1078,共 10 轮迭代
与程序输出1078一致。本站按实际代码补充核对:含初始化共10次取余,而while循环体执行9次,不能把十行除法误说成循环体执行十次。
标题页显示“最大公因子 (Greatest Common Divisor)”,右侧有人物画像,下方出现欧几里得简介文字。
讲解者开场介绍主题并提到欧几里得算法。
标题文字
人物画像
欧几里得简介文本
简介文字在标题页下方出现
红色激光笔在标题和简介文字间移动
页面主题始终为最大公因子与欧几里得算法引入
该画面用于建立课程主题和历史背景,尚未进入正式定义。
幻灯片切换到“1、定义最大公因子 (Greatest Common Divisor)”,列出两条定义条件、等价定义和整除记号说明。
红色激光笔依次指向条件一、条件二、等价定义和底部 Notes。
定义条件 1
定义条件 2
等价定义公式
Notes 中的整除记号说明
讲解顺序从定义条件推进到等价定义,再到底部记号说明
激光笔在不同公式和文字之间移动以指示当前讲解对象
页面始终围绕最大公因子的定义展开
公式和文字内容在同一页内保持不变
视觉结构把抽象定义拆成“先决条件—最大性条件—等价表达—记号说明”四个层次。
在公式 下方依次出现四个灰色标注框:被除数商除数余数。
讲解者同步逐项命名 a、、b、。
公式
标注框“被除数”
标注框“商”
标注框“除数”
标注框“余数”
149秒,a出现对应的带余除法术语标注。
152秒,出现对应的带余除法术语标注。
155秒,b出现对应的带余除法术语标注。
157秒,出现对应的带余除法术语标注。
公式本身保持不变。
a、b、、 的角色一一对应,不随标注顺序改变。
这个动画把抽象符号与中文术语绑定,帮助观众记住带余除法中每一项的名称。
页面切换到两条水平数轴,上方为一般性关系,下方为 70 的具体例子。
图注写图 4.1 关系 , 。
上方数轴:0, n, 2n, 3n, qn, a, ()n
下方数轴:0, 15, 30, 45, 60, 70, 75
括号标注 n、r、15、10
上方先用字母 n、q、r 表示一般情形。
下方再把同一结构实例化为 15、4、10 和 70。
两图都表达同一关系:目标点 a 位于 q 倍步长之后、() 倍步长之前。
余数始终是 a 到前一个倍数点的距离。
视频通过“先一般、后特例”的双数轴布局,把带余除法从符号定义转成可视化的区间长度关系。
画面是一张白底幻灯片,标题为“2、欧几里得算法的证明”,上方列出已知条件与“大胆假设”,中部用红色激光笔依次指向 d|a、d|b、 以及“∵①式和②式……”两行。
196至229秒,光点沿已有前提、差a−以及d同时整除b与的结论移动。
标题“2、欧几里得算法的证明”
已知条件 d|a、d|b、
除法定义
红色激光笔光点
激光笔从上方条件移动到中部推导行
视线重点从“d|a、d|b”转到“”再转到“d 是 b 和 的公因子”
幻灯片版式不变
这一时间范围内,上半部证明文字保留不变。
视觉指示帮助观众把口头讲解与对应公式逐行对齐,强调第一方向推导的引用关系。
229秒出现下半部证明文字,光点随任意共同因子与最大性的论证移动。
激光笔依次指向“设整数 c 是 b 和 的任何一个公因子”“”“”“c_max = ”。
新增下半段证明文字
红色激光笔光点
结论行 c_max =
页面从只有上半段证明扩展到包含完整下半段证明
激光笔焦点转移到 c 的任意性与最大性论证
标题仍为“2、欧几里得算法的证明”
上半段已知条件和第一方向推导仍保留在页面上
画面通过在同一页上补足后半段论证,把“公因子存在”与“最大性”两部分合并成一个完整证明。
290秒切换到第3节证明后的思考,正文区域尚基本空白。
讲解者说到“关于在证明之后”后片段结束。
新章节的具体内容未在本片段内展开。
新标题“3、证明后的思考”
空白正文区
红色激光笔光点
页面标题从“2、欧几里得算法的证明”变为“3、证明后的思考”
原有证明文字消失
仍是同一套白底幻灯片风格
红色激光笔继续作为指示工具
这表明证明部分已经结束,视频准备进入后续讨论,但本片段只捕捉到新标题出现。
白底幻灯片顶部标题为“3、证明后的思考”;随后出现第一条项目符号文本和公式 。
红色激光笔依次指向“变换”“大数a”“小数b”“余数”“”“”等关键词。
标题“3、证明后的思考”
第一条项目符号文字
公式
红色激光笔光点
294至296秒先保留标题与空白正文区。
296秒出现第一条说明及公式。
激光笔沿文字顺序移动,突出“变换”和公式两侧项。
页面背景始终为浅色白板样式。
标题在整个片段中保持不变。
视觉上先建立“这是证明之后的总结性思考”,再用高亮把欧几里得算法的核心抽象成一条替换公式。
第二条文字解释较小数与余数替代原问题、规模缩小、重复相除直至余数0以及辗转相除法这一别名。
红色激光笔依次划过“化简”“较小”“问题规模”“辗转相除”“辗转相除法”。
第二条项目符号文字
黄色高亮的“问题规模”
黄色高亮的“辗转相除法”
红色激光笔光点
322秒新增问题规模缩小的说明。
激光笔按语义重点移动,先指“化简/较小”,再指“问题规模”,最后指“辗转相除法”。
第一段核心公式仍保留在上方。
这一段把前面的公式从“怎么变”推进到“为什么有用”:规模缩小、反复相除、直至余数为 0。
右侧新增一列连续等式与不等式:, , , …, , , 。
红色激光笔自上而下逐行指示方程,并在末尾停留于 与 。
连续带余除法等式组
每行旁的余数范围标注
红框标出的 0
红框标出的
红色激光笔光点
344秒右侧出现整组余数链公式。
激光笔从上到下逐行追踪迭代过程。
结尾重点落在“+0”和“=”两处。
左侧两条解释文字继续保留。
每一行都保持“被除数 = 商×除数 + 余数”的带余除法形式。
这组视觉信息把抽象的 gcd 替换规则具体化为一个有限下降的余数序列,并明确终止于余数 0,最后一个非零余数 即为答案。
幻灯片标题为“3、证明后的思考”,左侧是三条文字说明,右侧是欧几里得算法的公式链,红色激光笔在文字与公式间移动。
标题“3、证明后的思考”
左侧三条文字说明
右侧带余除法公式链
红色激光笔
激光笔先指向左侧文字中的“变换”“问题规模”“辗转相除法”
随后移到右侧公式中的 与
页面内容本身不变
公式链始终展示从 a,b 到 的递推过程
这一页用文字加公式总结欧几里得算法的本质:不断把 化为 ,直到余数为 0。
幻灯片切换到“4、“欧几里得”算法C++实现”,中央显示完整 C++ 函数代码,底部有 Note:运行时环境为VS2019。
标题“4、“欧几里得”算法C++实现”
C++ 函数 greatestCommonDivisor
注释 //参数要求:
注释 //辗转相除
红色激光笔
激光笔依次指向函数名、参数、返回值、while 条件、赋值语句和 return b
页面末尾指向运行环境说明
代码文本保持不变
这一页把前面的数学递推关系翻译成可执行的迭代程序,强调循环条件和变量更新顺序。
幻灯片 Notes 特别写出“整除记号‘|’区分谁是被除数,谁是除数的问题”。
讲解者口头强调左右项角色,避免把除数和被除数弄反。
学习者容易把 k|a 中的左右两侧角色弄反,误以为右侧是除数。
视频明确指出:在 k|a 中,左边 k 是除数,右边 a 是被除数,等价于 。
Notes 专门写整除记号 ‘|’ 区分谁是被除数,谁是除数的问题。
原音强调:左手项是除数,右手项是被除数,予以记忆即可。
容易误以为竖线左边是被除数、右边是除数。
视频明确指出 k|a 中左边 k 是除数,右边 a 是被除数,等价于 。
第一页把定义拆成两条,并分别注明定性判断和定量分析。
只验证 c 是 a 和 b 的公因子,就以为已经证明了它是最大公因子。
还须满足最大性:两个输入的任何共同因子都整除候选最大公因数;这里的因子必须是共同因子。
视频分别使用 与 两个线性组合,对应两个方向的证明。
原音以差把整除性传到余数,再以和把整除性传回原被除数。
学习者可能误以为证明只需要一个固定线性组合就能一次性完成双向等价。
分析员补充:视频实际分成两步。第一步从 a、b 的公因子出发,使用 证明 d 也是 b、 的公因子;第二步从 b、 的任意公因子 c 出发,使用 证明 c 也是 a、b 的公因子。两个方向使用的线性组合不同,逻辑角色也不同。
第二条文字在解释“不断辗转相除,直到不产生余数”之后,才说“所以,欧几里得算法也称为‘辗转相除法’。”
讲解者把别名归因于反复相除直到无余数的过程。
可能误以为“辗转相除法”是与欧几里得算法并列的不同方法。
视频明确把“辗转相除法”作为欧几里得算法的别称,理由正是其反复带余相除、直到余数为 0 的机制。
右侧倒数第二行写 ,最后一行写 。
讲解者说“r n减1和 r n它是可以发生整除的。那么 d 也即最大公因子就记为 r n。”
看到最后出现“+0”时,可能误把 0 当作最大公因子。
视频显示余数为 0 只表示整除发生、迭代停止;真正的最大公因子是最后一个非零余数 。
代码注释写有 //参数要求:。
原音提醒调用者满足给定输入约定;关于反序正输入的一次转换属于本站对实际代码的推论,非原作者额外测试。
把原片的讲解约定,误解为代码会自动检查排序,或误解为反序的两个正输入一定计算错误。
原片明确把作为调用约定,代码本身没有参数检查。不能据此断言正输入必定算错:首次取余和赋值会转到正常的大小次序(本站推论)。与负输入仍超出本片讨论范围。
公式页写有 与 。
代码页写有 while ()。
原音说明余数零时结束,但返回的是当前正除数,而非零余数。
当余数变成 0 时,最大公因数就是这个 0。
视频说明终止时答案是“较小数 ”,也就是最后一个非零余数,而不是当前为 0 的余数;代码也通过循环结束后返回 b 来体现这一点。
同一页先给出两条件定义,再给出“以下是一个等价定义”。
视频把两条件定义与 max {k | k|a 且 k|b} 的写法作为等价表述呈现。
幻灯片在等价定义后写出 。
讲解者说明这是因为所求最大公因子是正数。
绝对值形式是等价定义在“最大公因子取正数”这一约定下的直接应用。
定义和等价定义中都使用了 k|a、k|b 这样的整除记号。
要读懂最大公因子定义,需要先理解整除记号的方向和含义。
页面先给两条件定义,再写以下是一个等价定义:max{...}。
视频明确把集合最大值写法称为前面两条件定义的等价定义。
证明页先引入 ,随后在小心论证中把 替换为 。
后半段论证依赖带余除法把 改写为 ,才能从 d|a 与 d|b 推出 。
数轴示例直接对应上方一般公式 。
的例子是带余除法定义的具体化演示。
证明页先设定 、,再提出 与 的等价假设。
核心等价命题是在已设定的 a、b、d、 语境下提出的。
幻灯片先给出 、、,再紧接着写出“∵①式和②式, ”。
第一方向推导直接依赖起始设定中的 与除法关系 。
前半段证明 d 是 b、 的公因子,后半段再证明任意公因子 ,最终得到 c_max=。
核心命题的一半依赖“d 是 b 与 的公因子”这一结论。
后半段通过任意公因子 c 推出 ,并结合前半段结论得到 。
核心命题的另一半依赖最大性论证,即任意 b、 的公因子都不超过 d。
视频把证明拆成“d 是 b、 的公因子”和“任意 c 是 b、 的公因子时 ”两部分。
分析员补充:这两部分分别对应“存在性/包含方向”和“最大性/反向控制方向”,共同构成等价证明。
先给出 ,随后解释其意义是“问题规模变小了”。
第二条“意义”是在解释第一条核心变换为何有效:因为该变换把原 gcd 问题替换成参数更小的新 gcd 问题。
页面标题和正文都在定义最大公因子。
讲解者说明因为最大公因子是正数,所以可写成 。
Notes 明确解释 k|a 等价于 ,并区分除数与被除数。
第一页完整给出最大公因子的定义与等价定义。
讲解者专门解释|左右项谁是除数谁是被除数。
公式四项被逐一标注为被除数、商、除数、余数。
双数轴把一般关系 与例子 并列展示。
页面写出由 ①② 得 ,再由 ②④ 得 d 是 b 与 的公因子。
完整证明尚未在本片段内结束。
标题为“2、欧几里得算法的证明”,结尾写有“c_max = 。证毕。”
幻灯片写有“∵①式和②式,∴ …④”。
幻灯片写有“c | a 和 c | b 可以得到,c 是 a 和 b 的公因子,必须满足:。”
页面先证明 d 是 b、 的公因子,再证明 d 是 b、 的最大公因子,最后写“证毕”。
已覆盖 · 标题页与欧几里得背景介绍,无数学推导,但交代了主题“最大公因子”和“欧几里得算法”。
已覆盖 · 正式进入最大公因子定义、等价定义和整除记号说明。
已覆盖 · 片段末尾仅有极短的收尾,无新增可辨认数学内容。
已覆盖 · 第一张幻灯片完整覆盖最大公因子定义、等价定义、符号性质和整除记号说明。
已覆盖 · 页面切换,无新增数学内容。
已覆盖 · 第二张幻灯片开头给出欧几里得算法证明设定,并列出 ①③ 三条基本事实。
已覆盖 · 带余除法公式与四项名称标注完整可见。
已覆盖 · 页面切换到数轴图,短暂过渡无新增公式。
已覆盖 · 一般性数轴与 示例完整覆盖。
已覆盖 · 页面切回证明页,过渡瞬间无新增内容。
已覆盖 · 提出保持最大公因数的不变量,并开始共同因子论证;紧接着继续完整的最大性论证。
已覆盖 · 覆盖标题页、已知条件、除法定义以及第一方向推导。
已覆盖 · 覆盖第二方向最大性论证、最终结论“证毕”以及两半证明的关系。
已覆盖 · 覆盖切换到“3、证明后的思考”的过渡画面;该新章节内容尚未展开,但片段内可见信息已记录。
已覆盖 · 仅显示标题“3、证明后的思考”和空白版面,尚无数学内容展开。
已覆盖 · 给出欧几里得算法的核心变换公式 。
已覆盖 · 解释变换意义、问题规模缩小,以及“辗转相除法”名称由来。
已覆盖 · 版面过渡瞬间,左侧文字已完整,右侧公式即将出现。
已覆盖 · 展示连续带余除法链、终止条件 ,以及 。
已覆盖 · 讲解结束后画面停留在完整公式页,无新增数学内容。
已覆盖 · 公式总结页与口述说明欧几里得算法的递推和终止条件。
已覆盖 · 幻灯片从公式页切换到代码页的过渡,无新增数学内容。
已覆盖 · C++ 实现页,讲解函数结构、循环条件和与数学递推的对应。
已覆盖 · 测试用例代码与调试窗口,展示程序输出 1078。
已覆盖 · 手算迭代表,逐行验证十轮计算与最终结果。
已覆盖 · 结尾致谢与停顿,无新增数学内容。
27 至 98 秒从公因子与最大性定义最大公因数,给出等价的最大值集合定义,解释整除记号,并说明 gcd 对正负号不敏感。
196 至 290 秒在 a>=、 的条件下,先证明 gcd(a,b) 同时整除 b 与 r1,再证明 b、r1 的任意公因子也整除 a 且不超过 gcd(a,b),从而得到 gcd(a,b)=gcd(b,r1)。
296 至 487 秒给出 gcd(a,b)=gcd(b,a mod b),沿余数链定位最后一个非零余数,用 C++ 循环实现,并用十次除法验证 gcd(1160718174,316258250)=1078;正式有限下降与输入边界说明明确标为编辑补充。