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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM