2016-07-14 30 views
1

我在JavaScript中工作,这有点令人困惑,因为代码正在返回正确的素数总和。它正在处理更多的数字。有一个错误,对于977,它返回976的素数总和,即72179,而不是977的总和,即73156.到目前为止,我测试过的所有东西都已正确返回。使用Eratosthenes筛选的素数总和找不到bug

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); 
+0

格式化您的问题时请不要懒惰 – Amit

+0

@Amit格式化完成 –

回答

2

问题的事实,你的“钛硅分子筛” Array从0索引的茎,但是你的算法假定array[n]代表数字n

既然你想array[n]===true意味着n是素数,你如果想在最后一个项目要索引array[977]意味着数量977需要长度978Array

当我将< num的所有实例更改为< num+1时,此问题似乎已解决。

+0

谢谢,解决了它。 :) –