要求
求出大于或等于 N 的最小回文素数。
回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数。
例如,2,3,5,7,11 以及 13 是素数。
回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数。
例如,12321 是回文数。
示例 1:
输入:6
输出:7
示例 2:
输入:8
输出:11
示例 3:
输入:13
输出:101
提示:
- 1 <= N <= 10^8
- 答案肯定存在,且小于 2 * 10^8。
核心代码
class Solution:
def primePalindrome(self, n: int) -> int:
def isPrime(x):
if x == 1:
return False
for i in range(2, int(x ** 0.5) + 1):
if x % i == 0:
return False
return True
def isPalindrome(x):
x = str(x)
left = 0
right = len(x) - 1
while left < right:
if x[left] != x[right]:
return False
left += 1
right -= 1
return True
while True:
if isPalindrome(n) and isPrime(n):
break
n += 1
if 10 ** 7 < n <10 ** 8:
n = 10 ** 8
return n
解题思路:我们定义了两个方法,一个判别素数,一个判别回文,然后我们对大于等于n的数值,进行回文和素数的判断,满足听见直接输出即可。