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

少なくとも1つの要素がC++で素数になるように、配列内のペアをカウントします


正の整数の配列が与えられます。目標は、少なくとも1つのプライムメンバーを持つ配列の要素の個別のペアの数を見つけることです。配列が[1,2,3,4]の場合、ペアは(1,2)、(1,3)、(2,3)、(2,4)、および(3,4)になります。

>

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

入力 − arr [] ={1,2,4,8,10};

出力 −少なくとも1つの要素が素数であるような配列内のペアの数は− 4

説明 −唯一の素元は2であり、それを他のすべてと組み合わせると、−(1,2)、(2,4)、(2,8)、(2,10)が得られます。

入力 − arr [] ={0,1,4,6,15};

出力 −少なくとも1つの要素が素数であるような配列内のペアの数は− 0

説明 −配列には素元がありません。

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

素数と非素数をマークするための配列arr_2[]を作成します。 arr_2 [i]が0の場合、iは素数であり、それ以外の場合は非素数です。いずれかのペアについて、任意の値arr_2 [A]、arr_2 [B]が0の場合、ペア(A、B)がカウントされます。

  • 正の整数の配列arr[]を取ります。

  • 関数check_prime(int temp、int arr_2 []は、値tempを最高として、配列arr_2 []を取り、arr_2[]に素数としてのインデックスとして0を設定します。

  • 0と1の両方が非素数であるため、arr_2 [0] =arr_2 [1]=0に設定します。

  • ここでforループを使用して、i=2からi*iまでトラバースします。

  • j =2*iからj<=tempおよびj+=iにトラバースします。非素数の場合はarr_2[j]=1に設定します。

  • 関数Prime_Pairs(int arr []、int size)は、配列とそのサイズを受け取り、少なくとも1つの要素が素数であるペアの数を返します。

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

  • 配列間の最大値としてtemp=* max_element(arr、arr + size)を初期化します。

  • check_prime(temp、arr_2)を呼び出します。ここで、arr_2 []は0で初期化され、長さはtempです。

  • これで、arr_2 []が作成されます。ここで、arr [i]は、素数としてiの場合は0、非素数としてiの場合は1です。

  • i=0からi

  • 各ペアarr[i]について、arr[j]はarr_2[arr [i]]==0またはarr_2[arr[j]]==0かどうかを確認します。はいの場合はカウントをインクリメントします。

  • 結果として、すべてのループの終了時にカウントを返します。

#include <bits/stdc++.h>
using namespace std;
void check_prime(int temp, int arr_2[]){
   arr_2[0] = 1;
   arr_2[1] = 1;
   for(int i = 2; i * i <= temp; i++){
      if (arr_2[i]==0){
         for (int j = 2 * i; j <= temp; j += i){
            arr_2[j] = 1;
         }
      }
   }
}
int Prime_Pairs(int arr[], int size){
   int count = 0;
   int temp = *max_element(arr, arr + size);
   int arr_2[temp + 1];
   memset(arr_2, 0, sizeof(arr_2));
   check_prime(temp, arr_2);
   for (int i = 0; i < size; i++){
      for (int j = i + 1; j < size; j++){
         if (arr_2[arr[i]] == 0 || arr_2[arr[j]] == 0){
            count++;
         }
      }
   }
   return count;
}
int main(){
   int arr[] = { 3, 5, 2, 7, 11, 14 };
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of pairs in an array such that at least one element is prime are: "<<Prime_Pairs(arr, size);
   return 0;
}

出力

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

Count of pairs in an array such that at least one element is prime are: 15

  1. C ++でa%b =kとなるような配列内のすべてのペア(a、b)を検索します

    配列Aがあるとすると、その配列から、a%b =kとなるようにすべてのペア(a、b)を取得する必要があります。配列がA=[2、3、4、5、7]、k =3であるとすると、ペアは(7、4)、(3、4)、(3、5)、(3、7)になります。 これを解決するために、リストをトラバースして、指定された条件が満たされているかどうかを確認します。 例 #include <iostream> using namespace std; bool displayPairs(int arr[], int n, int k) {    bool pairAvilable = true;

  2. C++の配列内の各要素のSurpasserCountを検索します

    1つの配列Aが与えられたと仮定します。その配列内の各要素の超過者の数を見つける必要があります。超過者は、現在の要素の配列の右側に存在するより大きな要素です。 A ={2、7、5、3、0、8、1}とすると、超過者は{4、1、1、1、2、0、0}であるため、2の右側には4つの数字があります。 4よりも多く、他の人にも同じルールがあります。解決策は非常に単純で、2つのネストされたループがあり、要素ごとに、超過者をカウントして、別の配列に格納します。 例 #include <iostream> using namespace std; void gerSurpassers(int arr[