輾轉相除法
輾轉相除法又名歐幾里得算法(Euclidean algorithm),目的是求出兩個正整數的最大公約數。
這條算法基於一個定理:兩個正整數 a 和 b(a 大於 b),它們的最大公約數等於 a 除以 b 的餘數 c 和 較小數 b 之間的最大公約數。
算法計算過程是這樣的:
- 2個數相除,得出餘數
- 如果餘數不爲0,則拿較小的數與餘數繼續相除,判斷新的餘數是否爲0
- 如果餘數爲0,則最大公約數就是本次相除中較小的數。
代碼實現
public static int method(int a, int b) {
int max,min,t;
max = Math.max(a,b);
min = Math.min(a,b);
if (max % min == 0) return min;
t = max % min;
while (t != 0) {
max = min;
min = t;
t = max % min;
}
return min;
}
上面的代碼是求最大公約數,如果所求的內容不止兩個數,就先求出兩個的最大公約數,然後用這個公約數與第三個繼續求,每次求的時候加一個判斷:如果最大公約數是1的話,後續的也不用求直接返回1即可。
最小公倍數就是兩個數的乘積除以最大公約數。