ภาพรวมปัญหา
ได้รับตัวเลข n ต้องหา Primorial Number (Pn#) = ผลคูณของจำนวนเฉพาะ n ตัวแรก
คล้าย Factorial แต่ใช้เฉพาะจำนวนเฉพาะ
ตัวอย่าง
Input: N = 4 Output: 210 Explanation: P4# = 2 × 3 × 5 × 7 = 210
วิธีแก้ปัญหา
- หาจำนวนเฉพาะ n ตัวแรก (ใช้ Sieve of Sundaram)
- คูณจำนวนเฉพาะทั้ง n ตัวเข้าด้วยกัน
ตัวอย่างโค้ด C++
#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