2016-07-14 4 views
1

JavaScriptで作業しています。コードが正しい素数の合計を返しているため、これは少し混乱します。それはより大きい数で働いています。バグがあります。977の場合、7315の977の和の代わりに72179の976の素数の和が返されます。今までテストしたすべてが正しく戻ってきました。Eratosthenesの篩を使用した累計の合計はバグを見つけることができません

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 Done with formatting –

答えて

2

問題は、あなたが「seiveが」Arrayが0からインデックスされているという事実から茎が、あなたのアルゴリズムはarray[n]は数nを表していることを前提としています。

あなたはarray[n]===truenが素数であることを意味しますので、あなたは最後の項目がarray[977]としてインデックスを作成したい場合、あなたは977を意味長さ978Arrayを必要としています。

< numのすべてのインスタンスを< num+1に変更すると、問題が解決されたようです。

+0

ありがとうございました。 :) –

関連する問題