ในปัญหานี้ เราได้รับตัวเลข 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