我在javascript中有一个数学问题:
我有一系列除数:
var divisors = [“3”,“4”,“5”,“10”,“12”,“15”,“20”,“30”,“60”]
以及在其中一个项目中没有提醒的情况下应该划分的项目数量:
var items_to_divide = [“10”,“30”]
我正在寻找一个函数,它会在items_to_divide之间从除数列表(var除数)中给出最低公约数。
在这个例子中,结果应该是5,因为10/5 = 2和30/5 = 6所以5是最低的公共分频器,因为它们都没有提醒而除以5。
任何人都可以在这里提出一个好的逻辑吗?
答案 0 :(得分:2)
我建议采取以下步骤:
这个算法的实现可以是这个:
function best_divisor() {
var division;
// Sort divisor array from lowest value to highest one
divisors = divisors.sort(function(a,b) {return +a > +b;});
// Test each value of this array
for (var i=0; i<divisors.length; i++) {
divide = true;
// check if it divides all values from the items_to_divide
for (var j=0; j<items_to_divide.length; j++) {
division = items_to_divide[j] / divisors[i];
if(division !== Math.round(division)) {
divide = false;
break;
}
}
// If all divisions give integers, this divisor is the lowest one
if(divide) return divisors[i];
}
// No divisor found
return -1;
}
答案 1 :(得分:1)
var answer = NaN;
for(var i = 0; i < divisors.length; ++i) {
var ok = true;
for(var j = 0; j < items_to_divide.length; ++j) {
if(parseInt(items_to_divide) % parseInt(divisors[i]) != 0) {
ok = false;
break;
}
}
answer = answer && Math.min(ans || parseInt(divisors[i]), parseInt(divisors[i]));
}
console.log(answer);
答案 2 :(得分:1)
这将确保它一旦找到最低值就不会继续搜索除数。
var divisors = [3, 4, 5, 10, 12, 15, 20, 30, 60];
var items_to_divide = [10, 30];
var divisor = false;
for (var i = 0; i < divisors.length; i++) {
var divisorfound = true;
for (var j = 0; j < items_to_divide.length; j++) {
if (items_to_divide[j] % divisors[i] !== 0) {
divisorfound = false;
break;
}
}
if (divisorfound === true) {
divisor = divisors[i];
break;
}
}
console.log(divisor);