function commonindex(a, b) {//找最大因数 原理是短除法
var arra = [];
console.log("a=" + a + "b=" + b);
for(var i = 1; i <= a; i++) {
if(a % i === 0) {
arra.push(i);
}
}
for(var i = 1; i <= b; i++) {
if(b % i === 0) {
arra.push(i);
}
}
var index = '';
arra.sort(function(a, b) {
return a - b;
});//将参数推入arra 并且排序
console.log(arra);
//重复出现的为公约数,最大公约数为数列最后一项公约数(用正则表达式应该会更好看,但是不会)
for(var i = arra.length - 1; i >= 0; i--) {
if(arra[i] === arra[i - 1] && !index) {
index = arra[i];
}
}
console.log(index);//参数互质,为1
if(index == 1 || index == "") {
return a * b;
} else {//短除法 得最大公倍数 最大公倍数=a*b/最大公约数
var indexa = a / index;
var indexb = b / index;
console.log("indexa=" + indexa);
console.log("indexb=" + indexb);
//console.log(index*(indexa)*(indexb));
return index * (indexa) * (indexb);
}
}
function smallestCommons(arr) {
var a = arr[0] > arr[1] ? arr[0] : arr[1];
var b = arr[0] < arr[1] ? arr[0] : arr[1];
var sum = 1;
for(var i = b; i <= a; i++) {
sum = commonindex(sum, i);
}
return sum;
}
console.log(smallestCommons([1, 10]));
用了大量循环,代码臃肿,抽象化程度太低,可读性也一般。
要想办法精简掉那些for循环。