Open In App

Find next palindrome prime

Find the smallest palindrome number which is prime too and greater than 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.
 




// 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;
}




// 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));
 
}
}




# 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




// 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.




<?php
// PHP program to find next palindromic
// prime for a given number.
 
function isPrime($num)
{
    if ($num < 2 || $num % 2 == 0)
        return $num == 2;
    for ($i = 3; $i * $i <= $num; $i += 2)
        if ($num % $i == 0)
            return false;
    return true;
}
 
function primePalindrome($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 ($x = 1; $x < 100000; ++$x)
    {
        $s = strval($x);
        $r = strrev($s);
        $y = intval($s.substr($r, 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
print(primePalindrome(112));
 
// This code is contributed by mits
?>




<script>
// Javascript program to find next palindromic
// prime for a given number.
 
function isPrime(num)
{
    if (num < 2 || num % 2 == 0)
        return num == 2;
    for (i = 3; i * i <= num; i += 2)
        if (num % i == 0)
            return false;
    return true;
}
 
function primePalindrome(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 (let x = 1; x < 100000; ++x)
    {
        let s = String(x);
        let r = s.split("").reverse().join("");
        let y = parseInt(s + r.substr(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
document.write(primePalindrome(112));
 
// This code is contributed by gfgking
</script>

Output: 
131

 


Article Tags :