通过将C ++中给定数组的质数相加可获得的不同总和的计数

我们给了两个包含素数和非素数的数组。目的是找到每个数组中素数对的不同总和的计数。

我们将通过在每个数组中形成两个素数对,取它们的和并将它们加到set <int>和中来做到这一点。最后,集合的大小是素数的不同总和的数量。

让我们通过示例来理解。

输入值 

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

输出结果 

素数的不同和: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 }

输出结果 

素数的不同和:0

说明 

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

以下程序中使用的方法如下

  • 我们有两个数组Arr1 []和Arr2 []用于正数,长度为len1和len2。

  • 如果num为质数,则函数isprime(int num)返回1,否则返回0。

  • 函数prime_Sums(int arr1 [],int arr2 [],int l1,int l2)接受两个数组,并返回素数对的不同和的计数。

  • 取一个set <int> sum来存储不同的和。

  • 在循环中遍历两个数组的每个元素。

  • 检查isprime(arr1 [i])&& isprime(arr2 [j])。如果为true,则将sum作为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<<"素数的不同和:"<<prime_Sums(Arr1,Arr2,len1,len2);
   return 0;
}

输出结果

如果我们运行上面的代码,它将生成以下输出-

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