C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. C++の配列で次の小さい方から次の大きい方を検索

    この問題では、n個の整数値で構成される配列arr[]が与えられます。私たちのタスクは、配列内で次の小さいものを見つけることです。 問題の説明 −配列内の現在の要素よりも大きい要素を見つけてから、この大きい要素よりも小さい要素を配列内で見つけます。そして、配列に次に小さい要素または次に大きい要素が存在しない場合は、-1を返します。 問題を理解するために例を見てみましょう 入力 arr[] = {4, 2, 8, 3, 9, 1} 出力 {3, 3, 1, 1, -1, -1} 説明 次に大きい要素の配列:{8、8、9、9、-1、-1} 9は配列の最大の要素であり、1は最後の要素であるため

  2. C++で特定のキーの次の右ノードを検索します

    この問題では、バイナリツリーBTとキー値が与えられます。私たちのタスクは、特定のキーの次の正しいノードを見つけることです。 バイナリツリーは、データストレージの目的で使用される特別なデータ構造です。 問題を理解するために例を見てみましょう 入力 key = 4 出力 5 説明 ノード4の隣の要素は5です。 ソリューションアプローチ この問題の簡単な解決策は、レベル順トラバーサルを使用してバイナリツリーをトラバースすることです。そして、与えられたキー値について、トラバーサルの同じレベルでノードの隣にノードが存在するかどうかを確認します。はいの場合は次のノードを返し、そうでない場合