เราได้รับอาร์เรย์สองอาร์เรย์ที่มีจำนวนเฉพาะและไม่ใช่จำนวนเฉพาะ เป้าหมายคือการหาจำนวนเฉพาะของจำนวนเฉพาะในแต่ละอาร์เรย์
เราจะทำสิ่งนี้โดยสร้างคู่ของไพรม์สองตัวจากแต่ละอาร์เรย์ นำผลรวมของพวกมันมาบวกเข้ากับเซ็ต
มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล
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) คืนค่า 1 หาก num เป็นจำนวนเฉพาะ มิฉะนั้นจะคืนค่า 0
-
ฟังก์ชัน prime_Sums(int arr1[],int arr2[],int l1,int l2) รับทั้งอาร์เรย์และคืนค่าจำนวนผลรวมที่แตกต่างกันของคู่ไพรม์
-
นำ set
sum เพื่อเก็บผลรวมที่แตกต่างกัน -
สำรวจแต่ละองค์ประกอบของอาร์เรย์ทั้งสองสำหรับลูป
-
ตรวจสอบว่า isprime(arr1[i]) &&isprime(arr2[j]) หากเป็นจริง ให้หาผลรวมเป็น tmp=arr1[i]+arr2[j]
-
เพิ่ม tmp เพื่อตั้งค่าโดยใช้ sum.insert(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