27 lines
872 B
Python
27 lines
872 B
Python
# https://leetcode.com/problems/closest-prime-numbers-in-range
|
|
|
|
from typing import List
|
|
|
|
class Solution:
|
|
def sieve(self, n):
|
|
is_prime = [True] * (n + 1)
|
|
is_prime[0] = is_prime[1] = False
|
|
for k in range(2, int(n**0.5) + 1):
|
|
if is_prime[k]:
|
|
for multiple in range(k *k, n + 1, k):
|
|
is_prime[multiple] = False
|
|
return [num for num, prime in enumerate(is_prime) if prime]
|
|
|
|
|
|
def closestPrimes(self, left: int, right: int) -> List[int]:
|
|
sieve = self.sieve(right)
|
|
result: List[int] = [-1, -1]
|
|
nums = [num for num in sieve if num >= left]
|
|
min = float('inf')
|
|
for i in range(len(nums) - 1 ):
|
|
d = nums[i + 1] - nums[i]
|
|
if min > d:
|
|
result = [nums[i], nums[i + 1]]
|
|
min = d
|
|
return result
|
|
|