एमिरप नंबर एक विशेष प्रकार की संख्या है जो एक अभाज्य संख्या है जिसके अंकों को उल्टा करने पर एक और अभाज्य संख्या बनती है (यह अभाज्य संख्या मूल से भिन्न होती है)।
एमिरप, प्राइम का उल्टा है।
कुछ अभाज्य संख्याएं जो एमिरप नहीं हैं वे पैलिंड्रोमिक प्राइम और एक अंक की अभाज्य संख्याएं हैं।
कुछ एमिरप नंबर हैं: 13, 17, 37, 733।
n से कम सभी एमिरप नंबर प्रिंट करने का प्रोग्राम।
यहां, हमें एक संख्या n दी गई है, और हमें दी गई संख्या n से कम या बराबर सभी एमिरप नंबर प्रिंट करने हैं।
उदाहरण से समझते हैं:
इनपुट: n = 40
आउटपुट: 13, 17, 31, 37
समाधान दृष्टिकोण
दिए गए संख्या से कम सभी एमिरप नंबर ढूंढने के लिए, हमें n से कम सभी अभाज्य संख्याएं ढूंढनी होंगी और फिर जांचना होगा कि क्या इसके अंकों को उल्टा करके बनी संख्या अभाज्य है, तो यह एक एमिरप नंबर है, इसे प्रिंट करें।
n तक अभाज्य संख्या ढूंढने और फिर इसके उल्टे अंकों की पुनः जांच करने के लिए, सबसे अच्छी विधि एराटोस्थनीज की छलनी (Sieve of Eratosthenes) का उपयोग करना है।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम:
उदाहरण
#include <bits/stdc++.h>
using namespace std;
int reverseDigits(int x) {
int digitRev = 0;
while (x > 0) {
digitRev = (digitRev * 10) + x % 10;
x = x / 10;
}
return digitRev;
}
void findAllEmirpNumber(int n) {
bool primeNo[10001];
memset(primeNo, true, sizeof(primeNo));
for (int p = 2; p * p <= 10001; p++) {
if (primeNo[p] == true) {
for (int i = p * 2; i <= 10001; i += p)
primeNo[i] = false;
}
}
for (int p = 2; p <= n; p++) {
if (primeNo[p]) {
int revNo = reverseDigits(p);
if (p != revNo && primeNo[revNo]) {
cout << p << "\t";
if (revNo <= n)
cout << revNo << "\t";
primeNo[revNo] = false;
}
}
}
}
int main() {
int n = 40;
cout << "All Emirp numbers less than or equal to " << n << " are\n";
findAllEmirpNumber(n);
return 0;
}
आउटपुट
All Emirp numbers less than or equal to 40 are 13 31 17 37