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.
C++
#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()
{
cout << primePalindrome(112);
return 0;
}
|
Java
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 && N <= 11 )
return 11 ;
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 && isPrime(y) == true )
return y;
}
return - 1 ;
}
public static void main(String args[])
{
System.out.print(primePalindrome( 112 ));
}
}
|
Python3
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 and N < = 11 ):
return 11
for x in range ( 1 , 100000 ):
s = str (x)
d = s[:: - 1 ]
y = int (s + d[ 1 :])
if (y > = N and isPrime(y)):
return y
print (primePalindrome( 112 ))
|
C#
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 && N <= 11)
return 11;
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 && isPrime(y) == true )
return y;
}
return -1;
}
public static void Main()
{
Console.WriteLine(primePalindrome(112));
}
}
|
PHP
<?php
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 && $N <= 11)
return 11;
for ( $x = 1; $x < 100000; ++ $x )
{
$s = strval ( $x );
$r = strrev ( $s );
$y = intval ( $s . substr ( $r , 1));
if ( $y >= $N && isPrime( $y ) == true)
return $y ;
}
return -1;
}
print (primePalindrome(112));
?>
|
Javascript
<script>
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 && N <= 11)
return 11;
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 && isPrime(y) == true )
return y;
}
return -1;
}
document.write(primePalindrome(112));
</script>
|
Last Updated :
15 Dec, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...