用 C++ 查找下一个回文素数


在这个问题中,我们给定一个元素 N。我们需要找到下一个回文素数。

问题描述 - 我们需要找到大于 N 的最小的素数,该素数也是回文数。

回文数 是一个数字,在两个方向上数字都相同。

素数 是一个数,如果它的唯一因子是 1 和它本身。

让我们举一个例子来理解这个问题,

输入

N = 12

输出

101

解释

大于 12 的回文数序列为 22、33、44、55、66、77、88、99、101……其中最小的回文数是 101。

解决方案

解决此问题的一个简单方法是找到所有大于 N 且为素数的回文数。

一个更有效的解决方案是找到偶数位回文数,它是 11 的倍数。

以下是此解决方案的证明,

11% 11 = 0
1111% 11 = 0

利用这一点,我们将找到具有偶数位的回文数 -

xyzzyx % 11 = 0,这使得所有偶数位数字都不是回文数。

程序说明我们解决方案的工作原理,

示例

#include <iostream>
#include <string>
using namespace std;
bool isPrime(int num) {
   if (num < 2 || num % 2 == 0)
      return num == 2;
   for (int i = 3; i * i <= num; i += 2)
      if (num % i == 0)
         return false;
   return true;
}
int primePalindrome(int N) {
   if (8 <= N && N <= 11)
      return 11;
   for (int x = 1; x < 100000; ++x) {
      string s = to_string(x), r(s.rbegin(), s.rend());
      int y = stoi(s + r.substr(1));
      if (y >= N && isPrime(y))
         return y;
   }
   return -1;
}
int main() {
   int N = 432;
   cout<<"The next prime palindrome is "<<findNextPrimePallindrome(432);
   return 0;
}

输出

The next number with same set of digits is 92543

更新时间: 2021-03-13

220 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告