[
math
]
Leetcode 0866 Prime Palindrome
Problem statement
https://leetcode.com/problems/prime-palindrome/
Solution
Here we need to iterate through palindromes, starting from the smallest one and return the first one, which is bigger than N
. We need to use is_prime
function to check if number is prime. Potential time complexity is O(N)
if we assume that there exists enough palindromes, which works in practice: we check O(sqrt{N})
numbers with O(sqrt{N})
complexity to check if it is prime for each of them.
Also we can notice that palindrome of even length will always be divisible by 11
, so there is no need to check them, except number 11
itself.
Complexity
Time complexity is O(N)
, space is O(1)
.
Code
class Solution:
def primePalindrome(self, N):
def is_prime(n):
return n > 1 and all(n%d for d in range(2, int(n**.5) + 1))
for L in range(1, 6):
for half in range(10**(L - 1), 10**L):
s = str(half)
x = int(s + s[-2::-1])
if x >= N and is_prime(x):
return min(x, 11) if N <= 11 else x