C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++では、合計が素数でn未満のペアをカウントします


入力として正の数nが与えられます。目標は、各ペアが素数でn未満の合計(i + j)を持つように、可能なペア(i、j)の数を見つけることです。また、i!=jおよびi、j> =1 nが4の場合、(1,2)である1つのペアのみが可能です。ここで、1 + 2 =3は素数であり、4未満です。また、1,2>=1です。

例を挙げて理解しましょう。

入力 − n =7

出力 −合計を素数とし、n未満のペアの数は− 3

説明 −ペアは(1,2)、(1,4)、(2,3)になります。合計3、5、5は素数で、7未満です。

入力 − n =10

出力 −合計を素数とし、n未満のペアの数は− 6

説明

ペアは(1,2)、(1,4)、(2,3)、(1,6)、(2,5)、(3,4)になります。

合計3、5、5、7、7、7は素数で、10未満です。

以下のプログラムで使用されているアプローチは次のとおりです

このアプローチでは、最初に関数check_prime(bool check []、int temp)でSieve of Sundaramを使用して、n未満のすべての素数を見つけます。

また、奇数のtempごとに、合計tempを持つ個別のペアの数はtemp/2になります。

2を除いて、すべての素数は奇数であるため、n未満の素数が見つかった場合は、ペアの数にtemp/2を追加します。

  • 変数nを入力として受け取ります。

  • 関数prime_pair(int n)はnを取り、合計が素数でn未満のペアの数を返します。

  • 初期カウントを0とします。

  • サンダラムのふるいは、入力nに対して2 * n+2未満の素数を生成します。 nを半分に減らし、temp_2に格納します。

  • 長さtemp_2の配列Check[]を作成して、フォームのすべての数値(i + j + 2 * i * j)をTrueとしてマークします。すべての要素をfalseとして初期化します。

  • 関数check_prime(bool check []、int temp)を使用して、形式の数値(i + j + 2 * i * j)に対してcheck[]をtrueで初期化します。そして、この合計

  • 次に、forループを使用してCheck[]をインデックスi=0からi

  • 各check[i]がfalseの場合、素数はtemp =2 * i+1になります。

  • 合計してtempになるペアはtemp/2になります。

  • カウントするためにtemp/2を追加します。

  • forループの最後に、合計が素数でn未満の合計ペアがあります。

  • 結果としてカウントを返します。

#include <bits/stdc++.h>
using namespace std;
void check_prime(bool check[], int temp){
   for (int i=1; i<=temp; i++){
      for (int j=i; (i + j + 2*i*j) <= temp; j++){
         check[i + j + 2*i*j] = true;
      }
   }
}
int prime_pair(int n){
   int count = 0;
   int temp;
   int temp_2 = (n-2)/2;
   bool check[temp_2 + 1];
   memset(check, false, sizeof(check));
   check_prime(check, temp_2);
   for (int i=1; i <= temp_2; i++){
      if (check[i] == false){
         temp = 2*i + 1;
         count += (temp / 2);
      }
   }
   return count;
}
int main(){
   int n = 10;
   cout<<"Count of pairs with sum as a prime number and less than n are: " <<prime_pair(n);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Count of pairs with sum as a prime number and less than n are: 6

  1. C++でそれより少ない数のすべての四つ子素数を印刷します

    この問題では、正の整数Nが与えられ、n以下のすべてのプライム4つ組を出力する必要があります。 四つ子素数 {p、p +2として計算される4つの素数のセットです。 、p +6 、p +8 }。 例 − 5 7 11 13. 問題を理解するために例を見てみましょう- Input: N = 15 Output: 5 7 11 13. この問題を解決するための簡単なアプローチは、素数pのすべての4つ組を生成し、すべてのp、p +2かどうかを確認することです。 、p +6 、p +8 素数です。このソリューションは簡単ですが、コンパイラにとってはより複雑です。 もう1つの効

  2. C++でのY未満の数のセットの最小数

    問題の説明 連続する数字の文字列と数字のYが与えられた場合、タスクは、すべてのセットが以下のルールに従うように最小セットの数を見つけることです- セットには連続した数字が含まれている必要があります 数字を複数回使用することはできません。 セット内の数はYを超えてはなりません。 例 str =“ 1234”およびY =20の場合、以下のセットが作成されるため、答えは3です- {12}{3}および{4} アルゴリズム 文字列を数値に変換 数値がY以下の場合は、f=1とマークします 数値がYを超える場合は、f =1の場合はカウントを増やし、fを0として再初期化し、numをs [i]-‘0