C++ 中的素数回文


假设我们必须找到大于或等于 N 的最小素数回文数。因此,如果 N 是 13,那么最小的回文数将是 101。

为了解决这个问题,我们将按照以下步骤进行 -

  • 如果 N 在 8 到 11 之间,那么返回 11

  • 对于 i 在 1 到 99999 之间

    • s := i 作为一个字符串

    • r := s

    • 反转 r

    • num := 连接 s 和 r 从索引 1 开始的子字符串,然后转换成数字

    • 如果 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

更新于:2020 年 4 月 30 日

870 次浏览

开启您的 职业生涯

完成课程后获取证书

开始吧
广告
© . All rights reserved.