【问题标题】:Why is this implementation of Sieve of Eratosthenes incorrect?为什么 Eratosthenes 筛的这种实现不正确?
【发布时间】:2018-02-11 01:50:06
【问题描述】:

目标是找到直到 num 的所有素数的总和。我在另一篇文章中看到了相同的实现,但它也不起作用:Sieve of Eratosthenes algorithm in JavaScript running endless for large number

但是,我用 977 尝试时,那里的解决方案也不正确,它返回 72179,但应该是 73156。

const sumPrimes = num => {
    var numList = [];
    var output = [];
    for (var i = 0; i < num; i++) {
        numList.push(true);
    }

    for (var i = 2; i <= Math.sqrt(num); i++) {
        if (numList[i]) {
            for (var j = i * i; j < num; j += i) {
                numList[j] = false;
            }
        }
    }

    for (var k = 2; k < num; k++) {
        if (numList[k]) {
            output.push(k);
        }
    }
    var sum = output.reduce((acc, cur) => acc + cur, 0);
    console.log(output);
    return sum;
};

伪代码来自:https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

【问题讨论】:

    标签: javascript algorithm sieve-of-eratosthenes


    【解决方案1】:

    您的代码没有问题。它返回小于num 的素数之和,小于977 的素数之和为72179。您预期的73156 答案是小于或等于 977 的素数之和。区别在于977 因为 977 是素数。

    【讨论】:

      猜你喜欢
      • 2014-04-15
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 2012-02-23
      • 1970-01-01
      相关资源
      最近更新 更多