2012-05-13 12 views
1

2つの与えられた数の間のすべての素数を見つけて素数を合計しようとしています。2つの数値の間の素数を見つける

素数検出を正しく行うループがあります。

しかし、何らかの理由で私はすべての素数を合計する方法を知らない。

int a,b,i,j,sum=0; 

do 
{ cout << "Enter a number: "; 
    cin >> a; 
    if (a < 4 || a > 1000000) 
    { cout << "Input must be between 4 and 1000000 inclusive." << endl; 
    } 
}while (a < 4 || a > 1000000); 

do 
{ cout << "Enter a second number: "; 
    cin >> b; 
    if (b < 4 || b > 1000000) 
    { cout << "Input must be between 4 and 1000000 inclusive." << endl; 
    } 
}while (b < 4 || b > 1000000); 

if (a > b) 
{ int hold; 
    hold = b; 
    b = a; 
    a = hold; 
} 

cout << "The prime numbers between " << a << " and " << b << " inclusive are: " << endl; 
//int sum; 
for (i = a; i <= b; i++) 
{ 
for (j = 2; j <= i; j++) // Changed the < to <=, and got rid of semicolon 
{ 
    if (!(i%j)&&(i!=j)) break; 
    if (j==i) 
    { 
       cout << i << endl; 
       sum += i; 
       cout << sum ; 

    } 
} 
} 

変数sumは私にゴミの結果を与えます。

+0

あなたの書式設定を修正し、分かりやすい変数名を使用してください、ありがとうございました... – ScarletAmaranth

+4

これは( 'sum')をゼロに初期化しましたか?範囲は何ですか? 'sum'の型は何ですか?範囲によっては、オーバーフローが発生する可能性もあります。 – amit

+0

私はそれを実際に作ったのです int sum = 0; – Mahmoud

答えて

4

正確な詳細なしに知ることは不可能であるが、2つの可能性が高い可能性がある:

  1. sumは0に初期化されていなかった使用前
  2. にあなたが遭遇していますoverflow、数値の合計があまりにも大きすぎてフィットできないためです。明らかに、sumのタイプと範囲に依存します。

EDIT:

edittedコードが小さい範囲については、私の作品(より大きな範囲のために、1にも問題#2を考慮すべきであることに注意してください)。 あなたは結果を誤読される可能性があります
、問題は単にあなたの書式のように見えるcout << sum ;

+0

すでにゼロで初期化していました まだ私にこの結果を教えてください – Mahmoud

+0

数字はどれくらいの大きさですか? – Thilo

+0

私はコードを編集しました.. – Mahmoud

1

あなたが私たちにすべての情報を与えたかどうかはわかりません。それ以外の場合、私にとってはsumを初期化していないようです。

int sum = 0; 
for (i = a; i <= b; i++) { 
    for (j = 2; j <= i; j++) { 
     if (!(i%j)&&(i!=j)) 
      break; 

     if (j==i) { 
      cout << i << endl; 
      sum += i; 
      cout << sum; 
     } 
    } 

}

+0

何が間違っていますか? コードが編集されています:) – Mahmoud

1

endlを追加してみてください。以下にエンドループを変更し、出力がより明確になります(注:あなたのコードでは、SUM2が宣言されていない - 私はこのすべて上記「int型のSUM2 = 0」を追加)

for (i = a; i <= b; i++) 
{ 
    for (j = 2; j <= i; j++) // Changed the < to <=, and got rid of semicolon 
    { 
     if (!(i%j) && (i!=j)) break; 
     if (j==i) 
     { 
      cout << "i = " << i << endl; 
      sum += i; 
      cout << "sum = " << sum << endl; 

     } 
     sum2 += sum ; 
     //cout << "sum2 = " << sum2 << endl; 
    } 
} 
+0

ありがとう...仕事です^ _ ^ – Mahmoud

関連する問題