leetcode_866 回文素数

48 阅读1分钟

要求

求出大于或等于 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

image.png

解题思路:我们定义了两个方法,一个判别素数,一个判别回文,然后我们对大于等于n的数值,进行回文和素数的判断,满足听见直接输出即可。