इस समस्या में, हमें एक संख्या n दी गई है। हमारा कार्य n से कम सभी पियरपॉइंट अभाज्य संख्याओं को प्रिंट करना है।
पियरपॉइंट प्राइम संख्या एक विशेष प्रकार की अभाज्य संख्या है जो निम्न रूप की होती है,
p = 2i . 3k + 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 << "50 से कम सभी पियरपॉइंट अभाज्य संख्याएं हैं :\n";
printPierpontPrimes(n);
return 0;
}
आउटपुट
50 से कम सभी पियरपॉइंट अभाज्य संख्याएं हैं : 2 3 5 7 13 17 19 37