我似乎无法继续:RangeError: Maximum call stack size exceeded
错误。我试图找到一个可以被一个范围内的所有数字整除的最小数字。该范围内的数字作为数组传递给函数。
function smallestNumberEvenlyDivisible(smallest, numbers) {
var z = 0;
for (z; z < numbers.length; z++) {
if (smallest % numbers[z] !== 0) {
smallest += smallest;
return smallestNumberEvenlyDivisible(smallest, numbers);
}
}
return smallest;
}
smallestNumberEvenlyDivisible(2018940, [18, 19, 20, 21, 22, 23]);
我希望输出为:6056820
但显然不是,因为堆栈错误。
几乎没有想法。有什么建议吗?
答案 0 :(得分:1)
19
永远不能2^n
n
19
是自然的,因为2^n
中唯一的主要因素是其本身,唯一的2
是{{} 1}}。这意味着,当您的原始smallest
无法被19
整除时,您会产生无休止的递归。
我有一段时间没有做这些事情并且不确定是否有更快的方法,但最小的应该是包含所有数字的所有素数因子的最小集合的乘法。
在示例中,
18 = 2 * 3 * 3
19 = 19
20 = 2 * 2 * 5
21 = 3 * 7
22 = 2 * 11
23 = 23
所有数字将分开的最小数字:2 * 2 * 3 * 3 * 5 * 7 * 11 * 19 * 23 = 6056820
如您所料。如何在算法上找到素数因子应该很容易找到。
再次注意,可能有更快的方法,也许您打算在没有错误的情况下实施?