js實現歐幾里得算法

概念
在數學中,展轉相除法,又稱歐幾里得算法(英語:Euclidean algorithm),是求最大公約數的算法。算法

證實
首先假設有兩個數a和b,其中a是不小於b的數,記a被b除的餘數爲r,那麼a能夠寫成這樣的形式:
a = b*q + r
假設a和b的一個約數爲u,那麼a和b都能被u整除,即:數組

a = su
b = tu
帶入原式可得ide

su = (tu)q + r
r = su - (tu)
q
r = u*(s-tq)
因此 u 也是r 的公約數,即idea

a和b的約數也整除它們的餘數r,因此a和b的任一約數同時也是b和r的約數。數學

同理可證實b和r的任一公約數也是a的公約數。
假設b和r的任一公約數爲 v,則有:it

b = mv
r = nv
帶入原式可得io

a = (mv)q + nv
a = v
(mq+n)
因此a和b的約數組成的集合與b和r的約數集合是相等的,那麼a和b的最大約數和b和r的最大約數也相等。function

實現
用js實現代碼以下:原理

function gcd(a,b){
let max = a>b?a:b;
let min = a>b?b:a;
let r = max%min;
if(r==0){
return min;
}else{
return gcd(min,r)
}
}
簡化版本以下:cli

function gcd(a,b){ return b===0?a:gcd(b,a%b); } 參考 展轉相除法[維基百科] 歐幾里得算法求最大公約數的數學原理 js實現歐幾里得算法/展轉相除法

相關文章
相關標籤/搜索