用輾轉相除法求兩個數的最大公約數

2021-05-25 02:00:59 字數 379 閱讀 1576

早在西元前300年左右,歐幾里得就在他的著作《幾何原本》中給出了高效的解法--輾轉相除法。輾轉相除法使用到的原理很聰明也很簡單,假設用f(x, y)表示x,y的最大公約數,取k = x/y,b = x%y,則x = ky + b,如果乙個數能夠同時整除x和y,則必能同時整除b和y;而能夠同時整除b和y的數也必能同時整除x和y,即x和y的公約數與b和y的公約數是相同的,其最大公約數也是相同的,則有f(x, y)= f(y, x%y)(y > 0),如此便可把原問題轉化為求兩個更小數的最大公約數,直到其中乙個數為0,剩下的另外乙個數就是兩者最大的公約數。

下面分別是用遞迴和非遞迴寫的求兩個數的最大公約數:

遞迴:

非遞迴:

知道了最大公約數,則最小公倍數就為兩數之積除以最大公約數。

輾轉相除法求兩個數的最大公約數

輾轉相除法 設兩數為a b a b 求a和b最大公約數 a,b 的步驟如下 1.用a除以b,得a b q r 1 0 r1 若r 1 0,則 a,b b 2.若r 1 0,則再用b除以r 1,得b r 1 q r 2 0 r 2 若r 2 0,則 a,b r 1,若r 2 0,則繼續用r 1除以r ...

求兩個數的最大公約數 輾轉相除法

原文 輾轉相除法 當兩個數都較大時,採用輾轉相除法比較方便 其方法是 以小數除大數,如果能整除,那麼小數就是所求的最大公約數 否則就用餘數來除剛才的除數 再用這新除法的餘數去除剛才的餘數 依此類推,直到乙個除法能夠整除,這時作為除數的數就是所求的最大公約數 例如 求4453和5767的最大公約數時,...

輾轉相除法求最大公約數

之前總結過一次高德納taocp中的最大公約數求解,其實課後題中的演算法修改要求實現的是輾轉相除法求解最大公約數。這個題目我最初的理解理解錯了,自然也沒有做出標準答案。現在按照標準答案的解答寫一下相應的 實現 defmaxcommdivisor m,n while m n 0 m m n if m 0...