轉相除法(歐幾里德算法) 最大公約數

gcd ( m, n) = gcd ( n, m mod n) 

原理
   
證明:a可以表示成a = kb + r,則r = a mod b
   
假設da,b的一個公約數,則有
    d|a, d|b
,而r = a - kb,因此d|r  (d|a表示d整除a)
   
因此d(b,a mod b)的公約數
   
假設d (b,a mod b)的公約數,則
    d | b , d |r
,但是a = kb +r
   
因此d也是(a,b)的公約數
   
因此(a,b)(b,a mod b)的公約數是一樣的,其最大公約數也必然相等,得證
 
自然語言:
    (1)
如果n=0, 計算停止並返回m, m即爲結果; 否則, 繼續(2)
    (2)
rm除以n的餘數, r = m mod n
    (3)
n賦值給m, r賦值給n, 繼續(1)

僞代碼:
    ALGORITHM Euclid ( m, n)
    //
計算gcd ( m, n)
    //
輸入: 非負整數m, n, 其中m, n不同時爲零
    //
輸出: m, n的最大公約數
    while n ≠ 0 do
        r  ← m mod n
        m  ← n
        n  ← r
    return m

參考:
    http://baike.baidu.com/view/1241014.htm
發佈了16 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章