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

C++에서 숫자의 원시

<시간/>

이 문제에서는 숫자 n이 주어집니다. 우리의 임무는 초기 번호를 인쇄하는 것입니다.

기본 번호 (Pn#)은 처음 n개의 소수를 곱한 숫자입니다.

원시 수는 수 n의 계승과 유사합니다. 차이점은 계승은 임의의 숫자가 될 수 있지만 원시 숫자의 경우 모든 소수가 사용된다는 것입니다.

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

Input: N = 4
Output
210
Explanation: Primorial number, Pn# = 2 * 3 * 5 * 7 = 210

이 문제를 해결하려면 처음 n개의 소수를 찾아야 합니다. 원시 숫자의 값인 n까지의 모든 소수의 곱을 출력하십시오.

예시

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

#include<bits/stdc++.h>
using namespace std;
const int MAX = 1000000;
vector <int> primeNumbers;
void findPrimes() {
   bool marked[MAX/2 + 1] = {0};
   for (int i = 1; i <= (sqrt(MAX)-1)/2 ; i++)
      for (int j = (i*(i+1))<<1 ; j <= MAX/2 ; j += 2*i +1)
         marked[j] = true;
   primeNumbers.push_back(2);
   for (int i=1; i<=MAX/2; i++)
      if (marked[i] == false)
         primeNumbers.push_back(2*i + 1);
}
int findPrimorial(int n) {
   findPrimes();
   int result = 1;
   for (int i=0; i<n; i++)
   result = result * primeNumbers[i];
   return result;
}
int main() {
   int N = 6;
   cout<<"Primorial(P#) of first "<<N<<" prime numbers is "<<findPrimorial(N)<<endl;
   return 0;
}

출력

Primorial(P#) of first 6 prime numbers is 30030