【问题标题】:Sum of Primes using Sieve of Eratosthenes can't find bug使用埃拉托色尼筛法的素数总和找不到错误
【发布时间】:2016-11-18 01:14:47
【问题描述】:

我正在使用 JavaScript,这有点令人困惑,因为代码返回了正确的素数和。它正在处理更大的数字。有一个错误,对于 977,它返回 976 的质数总和,即 72179,而不是 977 的总和,即 73156。到目前为止,我测试的所有内容都正确返回。

function sumPrimes(num) {

    var sum = 0;
    var count = 0;
    var array = [];
    var upperLimit = Math.sqrt(num);
    var output = [];

    for (var i = 0; i < num; i++) {
        array.push(true);
    }

    for (var j = 2; j <= upperLimit; j++) {
        if (array[j]) {
            for (var h = j * j; h < num; h += j) {
                array[h] = false;
            }
        }
    }

    for (var k = 2; k < num; k++) {
        if (array[k]) {
            output.push(k);
        }
    }

    for (var a = 0; a < output.length; a++) {
        sum += output[a];
        count++;
    }

    return sum;
}

sumPrimes(977);

【问题讨论】:

  • 格式化问题时请不要偷懒
  • @Amit 格式化完成

标签: javascript sum primes sieve-of-eratosthenes


【解决方案1】:

问题源于您的“seive”Array 从 0 开始索引,但您的算法假定 array[n] 代表数字 n

由于您希望 array[n]===true 表示 n 是素数,因此如果您希望最后一个项目被索引为 array[977]mean 号码977

当我将&lt; num 的所有实例更改为&lt; num+1 时,问题似乎已得到解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-14
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多