Find next palindrome prime

Find the smallest palindrome number which is prime too and greater then given number N.

Examples:

Input : N = 7
Output :11
11 is the smallest palindrome prime which
is greater than N.

Input : N = 112
Output : 131


A simple approach is to start a loop from N+1. For every number, check if it is palindrome and prime.

An efficient solution is based on below observations. All palindrome with even digits is multiple of 11.
We can prove as follow:
11 % 11 = 0
1111 % 11 = 0
111111 % 11 = 0
11111111 % 11 = 0

So:
1001 % 11 = (1111 – 11 * 10) % 11 = 0
100001 % 11 = (111111 – 1111 * 10) % 11 = 0
10000001 % 11 = (11111111 – 111111 * 10) % 11 = 0

For any palindrome with even digits:
abcddcba % 11
= (a * 10000001 + b * 100001 * 10 + c * 1001 * 100 + d * 11 * 1000) % 11
= 0

All palindrome with even digits is multiple of 11.
So among them, 11 is the only one prime
if (8 <= N <= 11) return 11
For other, we consider only palindrome with odd digits.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find next palindromic 
// prime for a given number.
#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<=11) return 11
    if (8 <= N && N <= 11)
        return 11;
  
    // generate odd length palindrome number 
    // which will cover given constraint.
    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 and it is a prime number 
        // then return it.
        if (y >= N && isPrime(y))
            return y;
    }
  
    return -1;
}
  
// Driver code
int main()
{
    cout << primePalindrome(112);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find next palindromic
// prime for a given number.
import java.lang.*;
class Geeks {
  
static boolean 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;
}
  
static int primePalindrome(int N)
{
    // if(8<=N<=11) return 11
    if (8 <= N && N <= 11)
        return 11;
  
    // generate odd length palindrome number 
    // which will cover given constraint.
    for (int x = 1; x < 100000; ++x) {
      
        String s = Integer.toString(x);
        StringBuffer buffer = new StringBuffer(s);
        buffer.reverse();
          
        int y = Integer.parseInt(s + 
        buffer.substring(1).toString());
      
        // if y>=N and it is a prime number 
        // then return it.
        if (y >= N && isPrime(y) == true)
            return y;
    }
  
    return -1;
}
  
// Driver code
public static void main(String args[])
{
    System.out.print(primePalindrome(112));
  
}
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find next palindromic 
# prime for a given number.
import math as mt
  
def isPrime(num):
  
    if (num < 2 or num % 2 == 0):
        return num == 2
    for i in range(3, mt.ceil(mt.sqrt(num + 1))):
        if (num % i == 0):
            return False
    return True
  
def primePalindrome(N):
  
    # if(8<=N<=11) return 11
    if (8 <= N and N <= 11):
        return 11
  
    # generate odd length palindrome number 
    # which will cover given constraint.
    for x in range(1, 100000): 
      
        s = str(x)
        d = s[::-1]
        y = int(s + d[1:])
      
        # if y>=N and it is a prime number 
        # then return it.
        if (y >= N and isPrime(y)):
            return y
      
# Driver code
print(primePalindrome(112))
  
# This code is contributed by
# Mohit kumar 29

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find next palindromic 
// prime for a given number. 
using System;
using System.Text;
using System.Collections;
  
class Geeks { 
  
static 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
  
static int primePalindrome(int N) 
    // if(8<=N<=11) return 11 
    if (8 <= N && N <= 11) 
        return 11; 
  
    // generate odd length palindrome number 
    // which will cover given constraint. 
    for (int x = 1; x < 100000; ++x) { 
      
        string s = x.ToString(); 
        char[] buffer = s.ToCharArray();
        Array.Reverse(buffer);
          
        int y = Int32.Parse(s + new string(buffer).Substring(1)); 
      
        // if y>=N and it is a prime number 
        // then return it. 
        if (y >= N && isPrime(y) == true
            return y; 
    
  
    return -1; 
  
// Driver code 
public static void Main() 
    Console.WriteLine(primePalindrome(112)); 
  
// This code is contributed by Mithun Kumar.

chevron_right


PHP

=N and it is a prime number
// then return it.
if ($y >= $N && isPrime($y) == true)
return $y;
}

return -1;
}

// Driver code
print(primePalindrome(112));

// This code is contributed by mits
?>

Output:

131


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.