約數
最大公約數
最大公約數就是兩個數中,大家都能相約且最大的數。
輾轉相除法
輾轉相除法
又名歐幾里得算法(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); } }