【发布时间】:2022-10-06 15:37:12
【问题描述】:
我了解如何从给定整数返回所有除数的概念。然而,当它到达大整数时,没有任何回报:
function divisors(n,res=[]) {
for (let i = 1; i <= n; i++) !(n%i) && res.push(i);
return res;
}
console.log(divisors(4)); // [ 1, 2, 4 ]
console.log(divisors(9)); // [ 1, 3, 9 ]
console.log(divisors(12)); // [ 1, 2, 3, 4, 6, 12 ]
console.log(divisors(975179493674)); // ?????
console.log(divisors(27550356289)); // ?????
下一个合乎逻辑的步骤是通过在 for 循环中取给定整数 n 的平方根来最小化迭代量。这有效并部分返回了一些除数,但它没有返回每个整数的所有除数。
function divisors(n,res=[]) {
for (let i = 1; i <= Math.floor(Math.sqrt(n)); i++) {
!(n%i) && res.push(i)
}
return res
}
console.log(divisors(4)); // [ 1, 2 ]
console.log(divisors(9)); // [ 1, 3 ]
console.log(divisors(12)); // [ 1, 2, 3 ]
console.log(divisors(975179493674)); // [ 1, 2, 97, 194 ]
console.log(divisors(27550356289)); // [ 1, 165983 ]
我就是无法完全理解它。任何帮助或指示将不胜感激。
更新:
仅使用 1 个循环仍然可以解决此问题。它缺少几行控制流,如下所示:
function divisors(n,res=[]) {
for (let i = 1; i <= Math.sqrt(n); i++) {
if (!(n%i)) {
i*i < n && res.push(i);
res.push(n/i);
}
}
return res;
}
console.log(divisors(4)); // [ 1, 2 ]
console.log(divisors(9)); // [ 1, 3 ]
console.log(divisors(12)); // [ 1, 2, 3 ]
console.log(divisors(975179493674)); // [ 1, 2, 97, 194, 5026698421, 10053396842, 487589746837, 975179493674 ]
console.log(divisors(27550356289)); // [ 1, 165983, 27550356289 ]
标签: javascript algorithm