1

与えられた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は私にゴミの結果を与えます。

4

3 に答える 3

4

正確な詳細なしで知ることは不可能ですが、2つの最も可能性の高い可能性は次のとおりです。

  1. sum使用前に0に初期化されていませんでした
  2. 数値の合計が大きすぎてそれに収まらないため、オーバーフローが発生しています。それは明らかに、のタイプと範囲に依存しsumます。

編集:

編集されたコードは、範囲が狭い場合は機能します(範囲が広い場合は、問題#2も考慮する必要があります)。
結果を読み間違えている可能性があります。に追加endlしてみてくださいcout << sum ;

于 2012-05-13T12:53:34.160 に答える
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;
        }
    }

}

于 2012-05-13T12:52:24.443 に答える
1

問題は単にフォーマットにあるようです。終了ループを次のように変更すると、出力がより明確になります (注: コードでは、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;
    }
}
于 2012-05-13T13:12:59.700 に答える