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