原理
最大公約數(shù)
兩個數(shù)的最大公約數(shù)可以用輾轉(zhuǎn)相除法.
輾轉(zhuǎn)相除法基于如下原理:兩個整數(shù)的最大公約數(shù)等于其中較小的數(shù)和兩數(shù)的差的最大公約數(shù)蚓再。例如警检,252和105的最大公約數(shù)是21( 252 = 21 × 12;105 = 21 × 5 )急波;因為 252 ? 105 = 21 × (12 ? 5) = 147 者春,所以147和105的最大公約數(shù)也是21技掏。在這個過程中署恍,較大的數(shù)縮小了隔显,所以繼續(xù)進(jìn)行同樣的計算可以不斷縮小這兩個數(shù)直至其中一個變成零却妨。這時,所剩下的還沒有變成零的數(shù)就是兩數(shù)的最大公約數(shù)括眠。
最小公倍數(shù)
兩個自然數(shù)的最大公約數(shù)與它們的最小公倍數(shù)的乘積等于這兩個數(shù)的乘積彪标。
例如12和16,(12掷豺,16)=4捞烟,[12,16]=48当船,有4×48=12×16题画,即(12,16)× [12德频,16]=12×16苍息。
代碼
//最大公約數(shù)
function gys(x, y) {
var max, min, temp;
max = x > y ? x : y;
min = x < y ? x : y;
if(x == 0 || y == 0){
return max;
}
while (max % min) {
temp = max % min;
max = min;
min = temp;
}
return min;
}
//最小公倍數(shù)
function gbs(x, y) {
return x * y / gys(x, y);
}
console.log('最大公約數(shù):' + gys(252, 105))//最大公約數(shù):21
console.log('最小公倍數(shù):' + gbs(252, 105))//最小公倍數(shù):1260
//最大公約數(shù)的遞歸算法
function gys2(m, n) {
return m % n == 0 ? (n) : (gys2(n, m % n));
}
//數(shù)組的最小公倍數(shù)
function arrGbs(arr){
var midNum = 1;
for(var i = 0;i < arr.length;i++){
midNum = gbs(arr[i],midNum);
}
return midNum;
}
console.log(arrGbs([2,3,7,16]))//336