求最大公約數 —— 輾轉相除法 & 更相減損術
阿新 • • 發佈:2022-04-09
求最大公約數的常用方法有輾轉相除法和更相減損術。
1. 輾轉相除法
又叫歐幾里得算術,該演算法基於如下定理:
兩個正整數 a 和 b(a > b),它們的最大公約數等於 a 除以 b 的餘數 c 和 b 之間的最大公約數。
程式碼如下:
function gcd(a, b) {
if (a % b === 0) {
return b
} else {
return gcd(b, a % b)
}
}
2. 更相減損術
則出自於中國古代的《九章算術》,其原理如下:
兩個正整數 a 和 b(a > b),它們的最大公約數等於 a-b 的差值 c 和較小數 b 的最大公約數。
程式碼如下:
function gcd(a, b) {
if (a === b) {
return a
} else if (a > b) {
return gcd(b, a - b)
} else {
return gcd(a, b - a)
}
}
3. 比較
輾轉相除法利用的是取模(%)運算,時間複雜度近似 O(log(max(a, b)))
;更相減損術利用的求兩數差值,演算法效能不穩定,最壞時間複雜度為 O(max(a, b)))
。
輾轉相除法取模運算效能差,但是收斂的速度比更相減損術快。