leetpycode/medium/closest_prime_numbers_in_range.py

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