假设我们必须找到最小的原始回文大于或等于N。因此,如果N为13,则最小回文将为101。
为了解决这个问题,我们将遵循以下步骤-
如果N在8到11的范围内,则返回11
适用于范围1至99999的i
s:= i作为字符串
r:= s
反向r
num:=从索引1连接s和r的子字符串,然后转换为number
如果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