輾轉相除法求最大公約數


輾轉相除法求最大公約數 

約數

如果數 a 能被數 b 整除,a 就叫做 b 的倍數,b 就叫做 a 的約數

最大公約數

最大公約數就是兩個數中,大家都能相約且最大的數。

輾轉相除法

輾轉相除法又名歐幾里得算法(Euclidean algorithm),目的是求出兩個正整數的最大公約數。它是已知最古老的算法,其可追溯至公元前300年前。

這條算法基於一個定理:兩個正整數 a 和 b(a 大於 b),它們的最大公約數等於 a 除以 b 的余數 c 和 較小數 b 之間的最大公約數。

算法計算過程是這樣的:

  • 2個數相除,得出余數

  • 如果余數不為0,則拿較小的數與余數繼續相除,判斷新的余數是否為0

  • 如果余數為0,則最大公約數就是本次相除中較小的數。

比如數字 25 和 10 ,使用輾轉相除法求最大公約數過程如下:

  • 25 除以 10 商 2 余 5

  • 根據輾轉相除法可以得出,25 和 10 的最大公約數等於 5 和 10 之間的最大公約數

  • 10 除以 5 商 2 余 0, 所以 5 和 10 之間的最大公約數為 5,因此25 和 10 的最大公約數為 5

題目要求

完善函數 gcd 的功能。函數 gcd 會計算並返回傳入的兩個正整數參數之間最大的公約數

如下所示:

gcd(30,3); // 返回結果為 3
gcd(12, 24); // 返回結果為 12
gcd(111, 11); // 返回結果為 1
function gcd(num1,num2){
    var remainder = 0;
    do{
       remainder = num1 % num2;
       num1 = num2;
       num2 = remainder;
    }while(remainder!==0);
    return num1;
}
​
console.log(gcd(24,12));

 

實現輾轉相除法通常有兩種思路,分別如下

1、使用循環實現

function gcd(number1, number2){
  var remainder = 0;
  do {
    remainder = number1 % number2;
    number1 = number2; 
    number2 = remainder;
  } while(remainder !== 0);
  return number1;
}

  

2、使用函數遞歸

function gcd(number1, number2) { 
  if (number2 == 0) {
    return number1; 
  } else {
    return gcd(number2, number1 % number2); 
  }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM