用 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 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.