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
```

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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++

 `// CPP program to find next palindromic  ` `// prime for a given number. ` `#include ` `#include ` `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

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

 `# 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#

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

=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

Article Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.