通过将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(intnum)返回1,否则返回0。
函数prime_Sums(intarr1[],intarr2[],intl1,intl2)接受两个数组,并返回素数对的不同和的计数。
取一个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