题解首先使用一个线性筛法来预先计算所有小于等于 1000000 的质数,并储存这些质数及其质数状态。在 findPrimePairs 方法中,如果 n 是奇数,则直接检查 n-2 是否为质数,因为除了 (2, n-2) 之外不可能有其他质数对和为奇数。如果 n 是偶数,题解通过遍历已知的质数列表来寻找所有可能的质数对 (x, n-x),并保证 x <= y = n-x。这是通过检查 y 是否为质数并且 y >= x 来实现的。
时间复杂度: O(n \log \log n)
空间复杂度: O(n)
MX = 10 ** 6 + 1 # 定义最大数值范围
primes = [] # 用于存储所有质数
is_prime = [True] * MX # 布尔数组,标记是否为质数
for i in range(2, MX): # 使用线性筛法生成质数
if is_prime[i]: # 如果当前数是质数
primes.append(i) # 添加到质数列表
for j in range(i * i, MX, i): # 标记所有的倍数为非质数
is_prime[j] = False
class Solution:
def findPrimePairs(self, n: int) -> List[List[int]]:
if n % 2: # 如果 n 是奇数
return [[2, n - 2]] if n > 4 and is_prime[n - 2] else [] # 返回 (2, n-2) 若它们都是质数
ans = [] # 存储结果的列表
for x in primes: # 遍历所有质数
y = n - x # 计算配对质数
if y < x: # 如果 y 小于 x,停止循环
break
if is_prime[y]: # 检查 y 是否为质数
ans.append([x, y]) # 添加质数对到结果列表
return ans # 返回结果