मान लीजिए हमें सबसे छोटा अभाज्य पैलिंड्रोम खोजना है जो N से बड़ा या उसके बराबर है। इसलिए यदि N 13 है, तो सबसे छोटा पैलिंड्रोम 101 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
अगर N 8 से 11 की सीमा में है, तो 11 लौटाएं
-
मैं के लिए 1 से 99999 की सीमा में
-
s :=i एक स्ट्रिंग के रूप में
-
आर:=एस
-
रिवर्स आर
-
num :=इंडेक्स 1 से s को जोड़ना और r को सबस्ट्रिंग करना, फिर नंबर में कनवर्ट करना
-
अगर num>=N और num प्राइम है, तो num वापस करें
-
-
वापसी 0
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool isPrime(int n){
if(n % 2 == 0 && n > 2) return false;
for(int i = 3; i * i <= n; i++){
if(n % i == 0) return false;
}
return n != 1 && n != 0;
}
int primePalindrome(int N) {
if(8 <= N && N <= 11) return 11;
for(int i = 1; i < 100000; i++){
string s = to_string(i);
string r = s;
reverse(r.begin(), r.end());
int num = stoi(s + r.substr(1));
if(num >= N && isPrime(num)) return num;
}
return 0;
}
};
main(){
Solution ob;
cout << (ob.primePalindrome(105));
} इनपुट
105
आउटपुट
131