找出能被兩個給定參數和它們之間的連續數字整除的最小公倍數。
範圍是兩個數字構成的數組,兩個數字不一定按數字順序排序。
例如對 1 和 3 —— 找出能被 1 和 3 和它們之間所有數字整除的最小公倍數。
注意:
這裏涉及到經典算法:求最大公約數gcd(greatest common divisor)和最小公倍數scm(smallest common multiple)
gcd(最大公約數)算法過程(歐幾里德算法/輾轉相除法)
有兩整數a和b:
① a%b得餘數c,即c=a%b
② 若c=0,則b即爲兩數的最大公約數
③ 若c≠0,則a=b,b=c,再回去執行①
scm算法(最小公倍數算法)
最小公倍數=兩整數的乘積÷最大公約數,即scm=sqrt(a*b)/gcd(a,b)
function smallestCommons(arr) {
function gcd(val1,val2){
if(val1%val2===0){
return val2;
}else{
return gcd(val2,val1%val2);
}
}
arr=arr.sort(function(a,b){
return a-b;
});
var val=arr[0];
for(var i=arr[0]+1;i<=arr[1];i++){
val*=i/gcd(val,i);
}
return val;
}
smallestCommons([1,5]);