解題思路:
1、輾轉相除法: 取兩個數中較大的數做被除數, 較小的數爲除數; 用較大的數去除以較小的數,若餘數爲0,則較小數就是這兩個數的最大公約數;如果不爲0,則用除數去除以上一步計算出的餘數, 直到餘數爲0,則這兩個數的最大公約數爲上一步的餘數。
代碼實現:
// m > n
function calcGCD(m, n) {
//求最大公約數
let u = m;
let v = n;
while (v != 0) {
[u, v] = [v, u % v];
}
return u;
}
2、相減法: 取兩個數中較大的數做被減數, 較小的數爲減數; 用較大的數去減去較小的數,若差爲0,則較小數就是這兩個數的最大公約數;如果不爲0,用減數和上一步計算出的差中較大值減去較小值, 直到差爲0,則這兩個數的最大公約數爲最後一次的減數。
// m > n
function calcGCD(m, n) {
//求最大公約數
let u = m;
let v = n;
let diff = v;
while (u - v != 0) {
if ( u -v < v) {
[u, v] = [ v, u - v];
} else {
[u, v] = [u - v, v];
}
}
return v;
}