跳到内容
从一个困惑开始

你想弄懂什么?

找到答案,看到讲解发生的那一刻,再顺着概念继续探索。

← 概念导览

关于「欧几里得算法的 C++ 实现是什么?」

2 个关键词匹配

正在理解你的问题,下面的搜索结果可先查看。

理解原因

↗

这段 C++ 代码在循环结束后返回 `b` 而不是 `r`,因为循环条件是 `r>0r > 0`。当循环终止时,`r` 已经变成了 0,这不是最大公约数。

适用条件:循环条件是 `while (r>0r > 0)`。;变量 `a`、`b` 和 `r` 在循环内按 `a=ba = b; b=rb = r; r=ar = a % b;` 更新。

理解原因

↗

最后一个非零余数 rnr_n 是 gcd⁡(a,b)\gcd(a,b),因为欧几里得算法在每一步都保持最大公约数不变:gcd⁡(a,b)=gcd⁡(b,r1)=gcd⁡(r1,r2)=⋯=gcd⁡(rn,0)\gcd(a,b) = \gcd(b,r_1) = \gcd(r_1,r_2) = \dots = \gcd(r_n, 0)。由于任何数都能整除 0,rnr_n 和 0 的最大公约数就是 rnr_n 本身。

适用条件:当余数为 0 时算法终止。;rnr_n 是序列中的最后一个非零余数。