अवधारणा
दी गई धनात्मक संख्या n के संबंध में, कार्य यह सत्यापित करना है कि n एक मूल अभाज्य संख्या है या नहीं। अगर n एक प्राइमरी प्राइम नंबर है तो हमें 'YES' प्रिंट करना होगा अन्यथा 'NO' प्रिंट करना होगा।
प्रिमोरियल प्राइम - गणित के संबंध में, एक प्राइमरी प्राइम को फॉर्म pN# + 1 या pN# - 1 की अभाज्य संख्या के रूप में परिभाषित किया जाता है, जहां pN# pN का प्राइमरी है जैसे कि पहले N अभाज्य संख्याओं का गुणनफल।पी>
इनपुट - एन =7
आउटपुट - हाँ
7 एन =2 के लिए पीएन + 1 फॉर्म का प्राथमिक अभाज्य है, प्राइमरी 2*3 =6 और 6+1 =7 है।
इनपुट - एन =29
आउटपुट - हाँ
29, N=3 के लिए pN-1 के रूप का प्राइमरी प्राइम है, प्राइमरी 2*3*5 =30 और 30-1 =29 है।
निम्नलिखित में, पहले कुछ प्राइमरी प्राइम प्रदर्शित होते हैं - 2, 3, 5, 7, 29, 31, 211, 2309, 2311, 30029
दृष्टिकोण
-
हमें इरेटोस्थनीज की छलनी लगाकर रेंज में सभी अभाज्य संख्याएँ उत्पन्न करनी होंगी।
-
सत्यापित करें कि N अभाज्य है या नहीं, यदि N अभाज्य नहीं है, तो नहीं प्रिंट करें
-
अन्यथा, पहले अभाज्य (अर्थात 2 ) से शुरू होकर अगली अभाज्य संख्या को गुणा करना शुरू करें और यह सत्यापित करते रहें कि उत्पाद + 1 =N या उत्पाद – 1 =N है या नहीं
-
यह देखा गया है कि यदि या तो उत्पाद+1=N या उत्पाद-1=N, तो N एक प्राइमरी प्राइम है अन्यथा नहीं।
उदाहरण
// CPP program to check Primorial Prime
#include <bits/stdc++.h>
using namespace std;
#define MAX 10000
vector<int> arr1;
bool prime1[MAX];
void SieveOfEratosthenes1(){
memset(prime1, true, sizeof(prime1));
for (int p = 2; p * p < MAX; p++) {
if (prime1[p] == true) {
for (int i = p * 2; i < MAX; i += p)
prime1[i] = false;
}
}
for (int p = 2; p < MAX; p++)
if (prime1[p])
arr1.push_back(p);
}
bool isPrimorialPrime1(long n){
// If n is not prime Number
// return flase
if (!prime1[n])
return false;
long long product1 = 1;
int i = 0;
while (product1 < n) {
product1 = product1 * arr1[i];
if (product1 + 1 == n || product1 - 1 == n)
return true;
i++;
}
return false;
}
// Driver code
int main(){
SieveOfEratosthenes1();
long n = 29;
// Check if n is Primorial Prime
if (isPrimorialPrime1(n))
cout << "YES\n";
else
cout << "NO\n";
return 0;
} आउटपुट
YES