C++ 中從給定陣列中新增素數可以得到的不同和的計數


我們有兩個陣列,包含素數和非素數。目標是找到每個陣列中素數對的不同和的計數。

我們將透過從每個陣列中生成兩個素數的對,取它們的和並將其新增到 set<int> sums 中來做到這一點。最後,集合的大小是素數的不同和的數量。

讓我們用例子來理解。

輸入

Arr1[] = { 1,2,3 } Arr2[] = { 2,3,4}

輸出

Distinct Sums of primes :3

解釋

Prime pairs (2,2), (2,3), (3,2), (3,3).
Unique sums are 4,5,6

輸入

Arr1[] = { 1,4,6 } Arr2[] = { 2,3,5 }

輸出

Distinct Sums of primes :0

解釋

Arr1[] has no prime number. Prime pairs do not exist.

下面程式中使用的方案如下

  • 我們有兩個陣列 Arr1[] 和 Arr2[] 用於正數,len1 和 len2 作為它們的長度。

  • 函式 isprime(int num) 如果 num 是素數則返回 1,否則返回 0。

  • 函式 prime_Sums(int arr1[],int arr2[],int l1,int l2) 獲取兩個陣列並返回素數對的不同和的計數。

  • 取一個 set<int> sum 來儲存不同的和。

  • 使用 for 迴圈遍歷兩個陣列的每個元素。

  • 檢查是否 isprime(arr1[i]) && isprime(arr2[j])。如果為真,則將和作為 tmp=arr1[i]+arr2[j]。

  • 使用 sum.insert(tmp) 將 tmp 新增到集合中

  • 最後返回 sum.size() 作為結果,它是素數的不同和。

示例

#include<bits/stdc++.h>
using namespace std;
int isprime(int num){
   if (num <= 1)
      return 0;
   for (int i = 2; i <= num/2; i++)
      if (num % i == 0)
         return 0;
   return 1; //if both failed then num is prime
}
int prime_Sums(int arr1[],int arr2[],int l1,int l2){
   int count=0;
   set sum;
   for (int i = 0; i < l1; i++){
      for(int j=0; j < l2; j++){
         if(isprime(arr1[i]) && isprime(arr2[j])){
            int tmp=arr1[i]+arr2[j];
            sum.insert(tmp);
         }
      }
   }
   return sum.size();
}
int main(){
   int Arr1[] = { 2, 3, 5 };
   int Arr2[] = { 2, 2, 4, 7 };
   int len1=sizeof(Arr1) / sizeof(Arr1[0]);
   int len2=sizeof(Arr2) / sizeof(Arr2[0]);
   cout<<"Distinct Sums of primes :"<<prime_Sums(Arr1,Arr2,len1,len2);
   return 0;
}

輸出

如果我們執行上述程式碼,它將生成以下輸出:

Count of ways to spell a number with repeated digits are: 16

更新於: 2020-10-31

131 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.