找到最小的回文数,它也是素数,然后大于给定数N。
例子:
Input : N = 7
Output :11
11 is the smallest palindrome prime which
is greater than N.
Input : N = 112
Output : 131
一种简单的方法是从N + 1开始循环。对于每个数字,请检查它是否是回文和素数。
一个有效的解决方案基于以下观察。所有具有偶数位的回文数均为11的倍数。
我们可以证明如下:
11%11 = 0
1111%11 = 0
111111%11 = 0
11111111%11 = 0
所以:
1001%11 =(1111 – 11 * 10)%11 = 0
100001%11 =(111111 – 1111 * 10)%11 = 0
10000001%11 =(11111111 – 111111 * 10)%11 = 0
对于任何具有偶数位的回文:
abcddcba%11
=(a * 10000001 + b * 100001 * 10 + c * 1001 * 100 + d * 11 * 1000)%11
= 0
所有具有偶数位的回文数均为11的倍数。
因此,其中11是唯一的素数
如果(8 <= N <= 11)返回11
对于其他情况,我们仅考虑具有奇数位的回文。
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
?>
输出:
131