为什么这段 C++ 代码在循环结束后返回 b 而不是 r?
这段 C++ 代码在循环结束后返回 `b` 而不是 `r`,因为循环条件是 ``。当循环终止时,`r` 已经变成了 0,这不是最大公约数。变量 `b` 保存了上一次迭代的最后一个非零余数,这才是实际的最大公约数。
适用条件
- 循环条件是 `while ()`。
- 变量 `a`、`b` 和 `r` 在循环内按 `; ; % b;` 更新。
理解与推导
- 追踪循环执行:`r` 被计算为余数。
- 当 `r` 变为 0 时,循环退出。
- 此时,`b` 包含上一次迭代中 `r` 的值(最后一个非零余数)。
- 返回 `b` 以输出最大公约数。
例子
视频解释说,当余数第一次变为 0 时循环退出,此时返回的 `b` 正好是最后一个非零余数,即最大公约数。
容易误解的地方
- 认为返回 `r` 会输出正确的最大公约数。
- 在状态更新期间混淆 `a`、`b` 和 `r` 的角色。
观看对应讲解
哔哩哔哩详细描述欧几里得算法(附证明)
6:41 – 7:32原站看这一段 ↗
相关概念
继续追问
相关问题
理解原因↗
欧几里得算法将旧的除数移到左边(新的被除数),将旧的余数移到较小数的位置(新的除数),以递归地简化问题。这种移位确保随后的每个除法步骤都在更小的数字上进行,同时保持原始数对的最大公约数,直到达到余数为零为止。
适用条件:算法应用于两个正整数。;前一个余数不为零。;过程持续直到获得余数 0。
YouTube欧几里得算法:两个最大公因数例题
0:58 – 1:23原站看这一段 ↗
掌握方法↗
要形成下一个除法行,你取前一行的除数,并将其作为新行的被除数。然后,你取前一行的余数,并将其作为新行的除数。
适用条件:你刚刚完成了欧几里得算法中的一个除法步骤。;前一个余数不为 0。
YouTube欧几里得算法:最大公因数例题|Michael Penn
0:50 – 1:12原站看这一段 ↗
掌握方法↗
要开始求 的欧几里得算法,需将较大的数写成较小的数乘以一个未知的商加上一个未知的余数。具体来说,建立除法方程 。
适用条件:输入是正整数。;较大的数放在方程的左边。;商是整数,且余数满足 。
YouTube欧几里得算法:两个最大公因数例题
0:25 – 0:58原站看这一段 ↗
掌握方法↗
要求两个大数的最大公约数,需反复应用带余数除法步骤。首先用较大的数除以较小的数。
适用条件:输入是两个正整数。;每一步都应用除法算法。;当余数等于 0 时停止过程。
YouTube欧几里得算法:两个最大公因数例题
2:46 – 4:09原站看这一段 ↗
认识概念↗
欧几里得算法的核心变换是将求 的问题替换为求 ,其中 是 除以 的余数。这在保持最大公约数不变的同时减小了问题规模。
适用条件:整数 和 满足 。;余数 严格小于 。
哔哩哔哩详细描述欧几里得算法(附证明)
4:56 – 5:22原站看这一段 ↗
答案依据视频资料生成并经过独立核验。若有疑问,请核对原视频或联系原作者。