有没有办法在JS中提高这个for循环的性能?

1 javascript performance loops for-loop

我试图解决项目euler 10问题(找到所有素数的总和低于200万),但代码需要永远完成,我如何让它更快?

    console.log("Starting...")
var primes = [1000];
var x = 0;
var n = 0;
var i = 2;
var b = 0;
var sum = 0;

for (i; i < 2000000; i++) {
    x = 0;
    if (i === 2) {
            primes[b] = i
            sum += primes[b];
            console.log(primes[b]);
            b++;
        }
    for (n = i - 1; n > 1; n--) {
        if (i % n === 0) {
            x++;
        }
        if (n === 2 && x === 0) {
            primes[b] = i;
            sum += primes[b];
            console.log(primes[b]);
            b++;
        }

    }
}
console.log(sum)
Run Code Online (Sandbox Code Playgroud)

Mat*_*ans 5

你可以做的最简单的超级简单事情:

  • 找到除数后,打破内循环!

  • 当你检查素性时,先从小除数开始,而不是从大除数开始.你会发现复合材料更快.

  • 你只需要检查除数<= Math.sqrt(n)

  • 你只需要检查素数除数.你有一个列表.

  • 循环外的进程2,然后只在循环内执行奇数: for(i=3;i<2000000;i+=2)