สมมติว่าเราต้องหาพาลินโดรมเฉพาะที่เล็กที่สุดที่มากกว่าหรือเท่ากับ N ดังนั้นถ้า N คือ 13 แล้ว palindrome ที่เล็กที่สุดจะเป็น 101
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
หาก N อยู่ในช่วง 8 ถึง 11 ให้คืนค่า 11
-
สำหรับผมอยู่ในช่วง 1 ถึง 99999
-
s :=ฉันเป็นสตริง
-
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