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

ค้นหา palindrome prime ตัวต่อไปใน C++


ในปัญหานี้ เราได้รับองค์ประกอบ N เราจำเป็นต้องหาพาลินโดรมไพรม์ตัวต่อไป

คำอธิบายปัญหา − เราจำเป็นต้องหาจำนวนเฉพาะที่น้อยที่สุดซึ่งเป็นจำนวนพาลินโดรมด้วย ซึ่งมากกว่า N

Palindrome Number คือตัวเลขที่ตัวเลขเหมือนกันทั้งสองทิศทาง

Prime Number คือตัวเลขหากตัวประกอบเป็น 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 ซึ่งทำให้เลขคู่ทั้งหมดไม่ใช่ palindrome

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

ตัวอย่าง

#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