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

C++의 피어폰트 프라임

<시간/>

이 문제에서는 숫자 n이 주어집니다. 우리의 임무는 모든 Pierpont 소수를 출력하는 것입니다. n보다 작습니다.

피어폰트 프라임 number는

형식의 특수 유형의 소수입니다.

p=2 i . 3 k + 1.

여기서 p는 소수이고 i와 k는 일부 정수입니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력 - n =50

출력 - 2, 3, 5, 7, 13, 17, 19, 37

이 문제를 해결하려면 조건을 따르는 모든 소수를 찾아야 합니다. 이를 위해 우리는 2와 3의 거듭제곱을 가진 숫자를 찾을 것입니다. 그리고 모든 소수를 찾습니다. 그리고 조건 다음에 오는 소수인 두 숫자를 인쇄하십시오.

예시

솔루션 구현을 보여주는 프로그램,

#include <bits/stdc++.h>
using namespace std;
void printPierpontPrimes(int n){
   bool arr[n+1];
   memset(arr, false, sizeof arr);
   int two = 1, three = 1;
   while (two + 1 < n) {
      arr[two] = true;
      while (two * three + 1 < n) {
         arr[three] = true;
         arr[two * three] = true;
         three *= 3;
      }
      three = 1;
      two *= 2;
   }
   vector<int> primes;
   for (int i = 0; i < n; i++)
   if (arr[i])
      primes.push_back(i + 1);
   memset(arr, false, sizeof arr);
   for (int p = 2; p * p < n; p++) {
      if (arr[p] == false)
         for (int i = p * 2; i< n; i += p)
            arr[i] = true;
   }
   for (int i = 0; i < primes.size(); i++)
      if (!arr[primes[i]])
      cout<<primes[i]<<"\t";
}
int main(){
   int n = 50;
   cout<<"All Pierpont Prime Numbers less than "<<n<<" are :\n";
   printPierpontPrimes(n);
   return 0;
}

출력

All Pierpont Prime Numbers less than 50 are :
2    3    5    7    13    17    19    37