我一直被困在这个免费的代码阵营算法中,真的需要一些帮助。
这就是我应该做的:
找到所提供参数的最小公倍数,这些参数可以被两者均分,以及这些参数之间范围内的所有序号。
范围将是两个数字的数组,不一定按数字顺序排列。
e.g。对于1和3 - 找到1和3的最小公倍数,它们可以被1到3之间的所有数字整除。
我必须检查天气,我的arr中的每个值都可以被我的普通倍数整除,并且真的无法实现它。
这是我到目前为止所做的:
function smallestCommons(arr) {
arr = arr.sort();
var number = arr[0];
var secArr = [];
// create a new list with all values to check against.
while (number >= arr[0] && number <= arr[1]) {
secArr.push(number);
number++;
}
var commonMultiple = 1;
var isTrue = true;
function isDivisible(item) {
if (item % commonMultiple === 0) {
return true;
}
else {
return false;
}
}
while (isTrue) {
commonMultiple++;
if (secArr.every(isDivisible)) {
isTrue = false;
}
}
return commonMultiple;
}
smallestCommons([5,1]);
我尝试使用Euclid的算法来解决这个问题并且认为这很难,尝试使用for循环并且无法使用.every
但它说我有一个无限循环。
答案 0 :(得分:0)
所以这是我的解决方案,我希望你觉得它很有启发性:
function smallestCommons(arr) {
var min = Math.min(arr[0], arr[1]);
var max = Math.max(arr[0], arr[1]);
var smallestCommon = min * max;
var doneCalc = 0;
while (doneCalc === 0) {
for (var i = min; i <= max; i++) {
if (smallestCommon % i !== 0) {
smallestCommon += max;
doneCalc = 0;
break;
}
else {
doneCalc = 1;
}
}
}
return smallestCommon;
}
答案 1 :(得分:-1)
function smallestCommons(arr) {
arr.sort((a,b)=>a-b);
var sm = arr[0];
var lg = arr[1];
var j = 0;
var mul;
var checkNumber = function(num) {
for(var i = sm; i <= lg; i++) {
if(num%i !== 0)
return false;
}
return true;
};
do{
j++;
mul = sm * lg * j;
} while(checkNumber(mul) !== true);
return mul;
}
console.log(smallestCommons([1,5]));