这道题目的目标是在给定的范围内找到差值最小的质数对。首先,我们需要一个有效的方法来判断一个数是否是质数。这里使用了一个基于Miller-Rabin素性测试的方法,这是一个概率性质数测试,用于判断大整数是否是质数。在给定区间内,我们遍历每个数,使用素性测试函数判断是否是质数。如果是,我们比较这个质数和上一个找到的质数的差值,如果比当前记录的最小差值小,我们更新结果。最后,如果找到至少一对质数,返回差值最小的那对;否则,返回[-1, -1]。这个方法依靠逐个检查每个数是否为质数,并记录最小差值,直到遍历完整个区间。
时间复杂度: O((right-left+1)*log^3(right))
空间复杂度: O(1)
class Solution:
def closestPrimes(self, left: int, right: int) -> List[int]:
def zhishu(n : int) -> bool:
if n < 2 : return False
if n == 2 : return True
if n % 2 == 0 : return False
seed = [2, 3, 5] # 使用基数进行素性测试
s = 0
now = n-1
while now % 2 == 0 : # 找到n-1的最大偶数因子
s += 1
now = now // 2
d = now
for a in seed:
if a < n:
x = pow(a, d, n)
for i in range(s):
y = pow(x, 2, n)
if y == 1 and x != 1 and x != n-1:
return False
x = y
if y != 1 : return False
return True
now = -1
result1 = -1
result2 = -1
diff = -1
for v in range(left, right + 1):
if zhishu(v):
if now > 0 :
if diff > 0 and v - now < diff :
result1 = now
result2 = v
diff = v - now
elif diff <= 0 :
result1 = now
result2 = v
diff = v - now
now = v
if diff == 1:
return [result1, result2]
if diff == 2:
return [result1, result2]
return [result1, result2] # 返回最接近的质数对或[-1, -1]