我在理解我遇到的这个问题时遇到了问题。我正在尝试找到用于生成此数字992,474,117的质数为此,我应用了以下代码:function primeFactorsTo(max){ var store = new Array(max), i, j, primes = new Array(max); for (i = 2; i <= max; ++i) { if (!store [i]) { primes.push(i); for (j = i << 1; j <= max; j += i) { store[j] = true; } } } return primes;}primeFactorsTo(992474117)当我运行这段代码时,我得到一个>>致命错误:无效的表大小分配失败 - JavaScript 堆内存不足<<我看到了一些解决方案,我必须在其中应用更大的旧空间大小node --max-old-space-size=4096 yourFile.js但仍然没有任何效果。可能是什么问题?怎么理解呢?感谢帮助
1 回答

catspeake
TA贡献1111条经验 获得超0个赞
您应该在开始时将数组初始化
primes
为空数组您只需要循环到数字的平方根。
一旦你找到一个质因数,就继续用它除以这个数,直到它不能再被整除为止,这样就不需要
store
数组了。
function primeFactorsTo(max)
{
var primes = [];
for (i = 2; i * i <= max; ++i)
{
if(max % i === 0){
primes.push(i);//found prime factor
while(max % i === 0) max /= i;
}
}
if(max > 2) primes.push(max);//largest prime factor
return primes;
}
console.log(primeFactorsTo(992474117));
添加回答
举报
0/150
提交
取消