1. 程式人生 > 其它 >求最大公約數 —— 輾轉相除法 & 更相減損術

求最大公約數 —— 輾轉相除法 & 更相減損術

求最大公約數的常用方法有輾轉相除法更相減損術

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)))

輾轉相除法取模運算效能差,但是收斂的速度比更相減損術快。