Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ไพร์มพาลินโดรมใน C ++


สมมติว่าเราต้องหาพาลินโดรมเฉพาะที่เล็กที่สุดที่มากกว่าหรือเท่ากับ 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