如何解决 JavaScript heap out of memory on prime

我在理解我遇到的这个问题时遇到了问题。我正在尝试找到用于生成此数字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

但仍然没有任何效果。可能是什么问题?怎么理解呢?感谢帮助


饮歌长啸
浏览 85回答 1
1回答

catspeake

您应该在开始时将数组初始化primes为空数组您只需要循环到数字的平方根。一旦你找到一个质因数,就继续用它除以这个数,直到它不能再被整除为止,这样就不需要store数组了。function primeFactorsTo(max){&nbsp; &nbsp; var primes = [];&nbsp; &nbsp; for (i = 2; i * i <= max; ++i)&nbsp;&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; if(max % i === 0){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; primes.push(i);//found prime factor&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while(max % i === 0) max /= i;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; if(max > 2) primes.push(max);//largest prime factor&nbsp; &nbsp; return primes;}console.log(primeFactorsTo(992474117));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript