Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 주어진 배열에서 소수를 더하여 얻을 수 있는 고유한 합계의 개수

<시간/>

소수 및 소수가 아닌 숫자를 포함하는 두 개의 배열이 제공됩니다. 목표는 각 배열에 있는 소수 쌍의 고유한 합 수를 찾는 것입니다.

각 배열에서 두 개의 소수 쌍을 만들고 합계를 가져와 set 합계에 추가하여 이 작업을 수행합니다. 결국 집합의 크기는 소수의 고유한 합계의 수입니다.

예를 들어 이해합시다.

입력

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)는 두 배열을 모두 사용하여 소수 쌍의 고유한 합계 개수를 반환합니다.

  • 고유한 합계를 저장하려면 집합 합계를 가져옵니다.

  • for 루프를 사용하여 두 배열의 각 요소를 탐색합니다.

  • isprime(arr1[i]) &&isprime(arr2[j])인지 확인하십시오. true이면 합계를 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