# Next smallest prime palindrome

• Difficulty Level : Expert
• Last Updated : 10 May, 2021

Given a positive integer N where . The task is to find the smallest prime palindrome greater than or equal to N.
Examples:

Input: 8
Output: 11

Input: 7000000000
Output: 10000500001

Approach:

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

The Naive approach is to loop from N + 1 until we found the next smallest prime palindrome greater than or equal to N.
Efficient Approach:
Let’s say P = R is a the next smallest prime-palindrome greater than or equal to N
Now since R is a palindrome, the first half of the digits of R can be used to determine R up to two possibilities. Let k be the first half of the digits in R. For eg. if k = 123, then R = 12321 or R = 123321.
Thus, we iterate through each k upto 105 and create the associated palindrome R, and check whether R is a prime or not.
Also, we will handle the odd and even palindromes separately, and break them when we found our result.
Below is the implementation of above approach:

## C++

 // C++ implementation of above approach#include using namespace std; #define ll long long int // Function to check whether// a number is primebool isPrime(ll n){    if (n < 2) return false;         for (ll i = 2; i <= sqrt(n); i++)    {        if (n % i == 0) return false;    }    return true;} // function to generate next// smallest prime palindromell nextPrimePalindrome(ll N){for (ll k = 1; k < 1000000; k++){         // Check for odd-length palindromes    string s = to_string(k);    string z(s.begin(), s.end());    reverse(z.begin(), z.end());     // eg. s = '1234' to x = int('1234321')    ll x = stoll(s + z.substr(1));     if (x >= N and isPrime(x)) return x;     // Check for even-length palindromes    s = to_string(k);    z = string(s.begin(), s.end());    reverse(z.begin(), z.end());     // eg. s = '1234' to x = int('12344321')    x = stoll(s + z);     if (x >= N and isPrime(x)) return x;}} // Driver Codeint main(){    ll N = 7000000000;         // Function call to print answer    cout << nextPrimePalindrome(N) << endl;         return 0;} // This code is contributed by// sanjeev2552

## Java

 // Java implementation of above approachclass GFG{ // Function to check whether// a number is primestatic boolean isPrime(long n){    if (n < 2) return false;         for (long i = 2; i <= Math.sqrt(n); i++)    {        if (n % i == 0) return false;    }    return true;} // reverse the Stringstatic String reverse(String s){    String s1 = "";    for(int i = s.length() - 1; i >= 0; i--)        s1 += s.charAt(i);         return s1;} // function to generate next// smalongest prime palindromestatic long nextPrimePalindrome(long N){    for (long k = 1; k < 1000000l; k++)    {                 // Check for odd-length palindromes        String s = ""+k;        String z;        z = reverse(s);             // eg. s = '1234' to x = int('1234321')        long x = Long.parseLong(s + z.substring(1, z.length()));             if (x >= N && isPrime(x))            return x;             // Check for even-length palindromes        s = ""+(k);        z = s;        z = reverse(z);             // eg. s = '1234' to x = int('12344321')        x = Long.parseLong(s + z);             if (x >= N && isPrime(x)) return x;    }    return -1;} // Driver Codepublic static void main(String args[]){    long N = 7000000000l;         // Function calong to print answer    System.out.println( nextPrimePalindrome(N) );}} // This code is contributed by Arnab Kundu

## Python3

 # Python3 implementation of above approachimport math # Function to check whether a number is primedef is_prime(n):    return n > 1 and all(n % d for d in range(2, int(math.sqrt(n)) + 1)) # function to generate next smallest prime palindromedef NextprimePalindrome(N):     for k in range(1, 10**6):         # Check for odd-length palindromes        s = str(k)        x = int(s + s[-2::-1])  # eg. s = '1234' to x = int('1234321')         if x >= N and is_prime(x):            return x         # Check for even-length palindromes        s = str(k)        x = int(s + s[-1::-1])  # eg. s = '1234' to x = int('12344321')         if x >= N and is_prime(x):            return x # Driver codeN = 7000000000 # Function call to print answerprint(NextprimePalindrome(N)) # This code is written by# Sanjit_Prasad

## C#

 // C# implementation of above approachusing System; class GFG{ // Function to check whether// a number is primestatic bool isPrime(long n){    if (n < 2) return false;         for (long i = 2; i <= Math.Sqrt(n); i++)    {        if (n % i == 0) return false;    }    return true;} // reverse the Stringstatic String reverse(String s){    String s1 = "";    for(int i = s.Length - 1; i >= 0; i--)        s1 += s[i];         return s1;} // function to generate next// smalongest prime palindromestatic long nextPrimePalindrome(long N){    for (long k = 1; k < 1000000; k++)    {                 // Check for odd-length palindromes        String s = ""+k;        String z;        z = reverse(s);             // eg. s = '1234' to x = int('1234321')        long x = long.Parse(s + z.Substring(1, z.Length - 1));             if (x >= N && isPrime(x))            return x;             // Check for even-length palindromes        s = ""+(k);        z = s;        z = reverse(z);             // eg. s = '1234' to x = int('12344321')        x = long.Parse(s + z);             if (x >= N && isPrime(x)) return x;    }    return -1;} // Driver Codepublic static void Main(String []args){    long N = 7000000000;         // Function calong to print answer    Console.WriteLine( nextPrimePalindrome(N) );}} // This code is contributed by PrinciRaj1992

## Javascript

 
Output:
10000500001

Time Complexity: O(N*sqrt(N)) where N is upper limit and the sqrt(N) term comes from checking if a candidate is prime.

My Personal Notes arrow_drop_up