
最小公倍数算法挑战
方法一:
function smallestCommons(arr) {
var res=make_arr(arr).reduce(function(a,b){ //利用reduce,两两求最小公倍数
return gcd(a,b);
});
return res;
}
function make_arr(arr){ //返回包含给定参数和他们之间连续数字的顺序数组
arr.sort(function(a,b){
return a-b;
});
var max=arr.pop();
var num=arr[0];
while( num<max ){
num++;
arr.push(num);
}
return arr;
}
function gcd(a,b){ //遍历,获得a,b的最小公倍数
var max=Math.max(a,b),
min=Math.min(a,b),
count;
for(var i=1;i<=max;i++){
count=min*i;
if(count%max===0){
return count;
}
}
}
smallestCommons([1,5]);
方法二:
function smallestCommons(arr) {
var len = arr.length,
max = Math.max(arr[0], arr[len - 1]),
min = Math.min(arr[0], arr[len - 1]),
cmMaxValue = 1,
cm = max,
nowValue = max,
j = 1,
isSCM = true,
r = 0;
for (var i = min; i <= max; i++) {
cmMaxValue *= i;
}
while (cm <= cmMaxValue) {
for (var n = min; n < max; n++) {
if (cm % n !== 0) {
isSCM = false;
break;
}
}
if (isSCM) {
r = cm;
break;
}
j++;
cm = j * max;
isSCM = true;
}
return r;
}
smallestCommons([1,5]);