-3

n>2 の偶数が与えられたとき、和が n である素数を見つけます。素数を見つける関数を使用する必要があります。

たぶん、このようなことを始めることができますか?:

for (int i = 2; i < n; i++)
{
    if (IsPrime(i) && IsPrime(n - i))
        break;
}
4

5 に答える 5

0

宿題だと思うので、始めるためのヒントを紹介します。

1) 数値 N が素数かどうかを調べるには、N/2 まで反復し、その倍数が見つかった場合にブレークします。空間と時間の複雑さをあまり気にしないのであれば、ネストされた for ループが最も簡単な解決策です。

于 2012-12-05T08:56:47.677 に答える
0

解決策全体ではなく、出発点となるヒントを提供します。

これは可能な解決策の 1 つであり、THE 解決策ではありません。

まず、数値が素数かどうかをチェックする関数を定義します。

bool isPrime(const unsigned& number) {
  for (unsigned i = 2; i < number; i++) {
     if (number % i == 0) {
       return false;
     }
   }
  return true;
 }

以下も定義します。

struct PrimeSum {
  unsigned first;
  unsigned second; 
 };

PrimeSum searchPrimeAddend(const unsigned& number, const vector<unsigned>& v) {
   // your code to find two number iterating the vector 
}

あなたのメインで:

int main(const int argc, const char* argv[]) {
  const unsigned N = 13;
  std::vector<unsigned> primeList;
  for (unsigned i = 3; i < N; i += 2) {
    if (isPrime(i)) {
       primeList.push_back(i);
    }
  }
 PrimeSum primes = searchPrimeAddend(N, primeList);
}
于 2012-12-05T08:59:23.360 に答える
-1

疑似コード

  • n までのすべての素数を見つけて、コンテナーを埋めます (挿入順またはコンテナー順)
  • コンテナの場合、前方イテレータ「up」と逆イテレータ「down」を取得します
  • while (up!=end && down!=rend && *up<=*down)
    • 合計 = *アップ + *ダウン
    • 合計 == n の場合
      • 保存ペア // 見つかりました
      • ++アップ
    • それ以外の場合は合計 > n
      • ++ダウン
    • それ以外の場合は合計 < n
      • ++アップ

これにより、いくつかの C++ の宿題が残されます

別のソリューション (おそらく 1 回の実行でより効率的)

  • n/2 までのすべての素数を見つけて、コンテナーを埋めます (挿入順またはコンテナー順)
  • コンテナの get forward iterator 'up'
  • while (up!=end)
    • その他 = n - *up
    • if is_prime(その他)
      • ペアを保存 *アップ、その他
    • ++アップ
于 2012-12-05T12:08:30.797 に答える