C++のプライムパリンドローム
N以上の最小のプライムパリンドロームを見つける必要があるとします。したがって、Nが13の場合、最小のパリンドロームは101になります。
これを解決するには、次の手順に従います-
-
Nが8〜11の範囲にある場合は、11を返します
-
1〜99999の範囲のiの場合
-
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
-
C++での回文分割
1つの入力文字列があるとします。パーティションのすべてのサブ文字列が回文である場合、その文字列の分割は回文分割です。このセクションでは、指定された文字列をパリンドロームで分割するために必要な最小限のカットを見つける必要があります。したがって、文字列が「ababbbabbababa」のような場合は、回文として分割するための最小カット。ここでは3つのカットが必要です。回文は次のとおりです。ババブ| b |アババ これを解決するには、次の手順に従います- n:=strの長さ それぞれ次数nxnのカット行列とパル行列を定義します for i:=0 to n、do pal [i、i]:=tr
-
C++の平衡素数
平衡素数 numberは、前の素数と次の素数で同じ差がある素数です。つまり、最も近い次の素数と前の素数の平均です。 素数が平衡素数になるには、次の式に従う必要があります- P n =(P(n-1)+ P(n + 1))/ 2 ここで、nは、順序付けられた素数のセット内の素数pnのインデックスです。 素数の順序集合:2、3、5、7、11、13、…。 まず、平衡素数は5、53、157、173、… この問題では、数nが与えられ、n番目の平衡素数を見つける必要があります。 例を見てみましょう Input : n = 3 Output : 157 このため、素数を生成し、配列に