添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

欧几里得算法

什么是欧几里得算法?欧几里得算法是为了解决 GCD 问题,这里的 GCD 是指 Greatest Common Divisor 即最大公约数,而不是 iOS 中的 Grand Central Dispatch 🤣 。所以这篇分享是关于算法的。

欧几里得算法(GCD)

求 GCD 在数论中公认的最常用算法即为欧几里得算法,也就是我们在高中时学到的 辗转相除法

欧几里得算法的基本原理用一句话就可以说清楚: 两个整数的最大公约数等于其中较小的数和两数的差的最大公约数,即 a = n \times t = k \times m \times t + r \\ \Rightarrow r = (n - k \times m) \times t \((n-k \times m) \times t\) 一定是整数,所以 a b 的公约数 t 也是 r 的约数。所以如果我们递归的求解 \(a\ mod\ b\) 也就是 a % b ,就可以得到 a b 的最大公约数 GCD 了。什么时候递归结束呢?当 a % b == 0 的时候,因为在这个过程中,如果 a % b 无法求得正整数 r 时,则无法继续按照上述规律继续拆分。

# python
def gcd(a, b):
    return a if b == 0 else gcd(b, a % b)
// C++
int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);

这里另外提一句, a b 两数的最大公倍数 LCM(a, b) = a * b / GCD(a, b) 。这里就不证明了,有兴趣的自己谷歌。

本作品采用 知识署名-非商业性使用-禁止演绎 (BY-NC-ND) 4.0 国际许可协议 进行许可。