Loading

C++求最大公约数(欧几里得算法)

C++中求最大公约数主要采用欧几里得算法,欧几里得算法的核心其实是\(gcd(a, b) = gcd(b, a\ mod\ b)\)下面进行证明

  1. \(a\ mod \ b\)进行变换

    \[\begin{align*} a\ mod\ b &= a - \left \lfloor \frac{a}{b} \right \rfloor \times b\\ &=a - c\times b \end{align*} \]

  2. 证明对于\(a\)\(b\)的任意公约数\(k\),都是\(b\)\(a\ mod\ b\)公约数
    \(b\)的公约数,同时也是\(a-c\times b\) 的公约数

  3. 证明对于\(b\)\(a\ mod\ b\)的任意公约数\(m\),都是\(a\)\(b\)的公约数

    即证明\(m\)\(a\)的公约数,\(m\)可以整除\(a\ mod\ b\),则\(m\)可以整除\(a-c\times b\)所以\(m\)可以整除\(a\)

综上所述,集合\(cd(a, b)\)等于集合\(cd(b, a\ mod\ b)\),则\(gcd(a, b) = gcd(b, a\ mod\ b)\),该过程的实现如下

int gcd(int a, int b) {
    return b ? gcd(b, a % b) : a;
}
posted @ 2022-03-26 20:04  Forceco  阅读(819)  评论(0编辑  收藏  举报