2

私は、(できれば) ユーザーが数値を入力できるようにし、2 とその数値 (両端を含む) の間の素数の合計を出力するコードを書いています。ただし、コードの最後から 2 番目の行で 1 つの問題が発生しています。この質問に対する他の解決策を調べましたが、私のものと同じエラーが原因ではないようです。コードは次のとおりです。

#include <iostream>

using namespace std;

int Q;

int sum_primes(int N) {

    cout << "Enter a number and I will generate the sums of the primes up to (and including) that number: ";
    cin >> Q;

    int i, count, sum = 0;

    for(N = 1; N <= Q; N++) {    
         count = 0;

         for(i = 2; i <= N/2; i++) {
             if (N % i == 0) {
                 count++;
                 break;
             }
         }

         if (count == 0 && N != 1)
             sum = sum + N;

         return N = sum;
    }
}

int main() {
    cout << "The sum of these primes is: " << sum_primes(int N);

   return 0;
}
4

3 に答える 3

5
cout << "..." << sum_primes(int N);

数字に置き換えint Nます。関数は既に定義されています。次に、パラメーターを指定する必要があります。

またはN、ユーザー入力を通じて の値を指定したい場合もあります。次に、代わりにこれを使用します。

int N;

cin >> N;

cout << "The sum of these primes is: " << sum_primes(N);

また、GigaWatt が指摘したように、あなたが行った行:

return N = sum;

不要です。単に戻るsumだけでも同様に機能します。

完全なコードは次のとおりです。

#include <iostream>
#include <cmath>

bool isPrime(int x) {

    if (x == 1) return false;
    if (x == 2) return true;

    bool prime = true;
    for (int i = 2; i <= sqrt(x); i++) {
        if (x % i == 0) { prime = false; break; }
    }
    return prime;
}

int sum_primes(unsigned int N) {

    int sum = 0;

    for ( int i = 1; i <= N; i++ ) {

        if (isPrime(i)) sum += i;

    }
    return sum == 0 ? 1 : sum;
}

int main() {

    int Q;

    std::cin >> Q;

    std::cout << "Sum of primes " << sum_primes(Q);

}
于 2012-11-01T17:35:26.607 に答える
1

実際、このコードには複数の問題があります。いくつかリストアップしますが、これですべてが網羅されているわけではありません。

  • そこには、コードの構造が少しおかしくなっています。これは、単純な構文エラーを修正すると明らかになると思います。スタイルのポイントQとして、引数sum_primesとして およびに渡しNます。
  • 「数値を入力してください」と尋ねる前に、「これらの素数の合計は次のとおりです」と出力しています。
  • return N = sum外側のforループをすぐに終了します。これは、ほぼ間違いなく、あなたが望んでいたものではありません。

現在取り組んでいる C++ の入門書よりも優れた入門書を探す必要があると思います。申し訳ありませんが、それについてアドバイスを提供することはできません。

于 2012-11-01T17:47:06.227 に答える
0

sum_primes への引数が正しくありません。

関数は int を取るように定義されていますが、渡していません。

于 2012-11-01T17:35:49.990 に答える