数学-素数筛-2761. 和等于目标值的质数对

发布时间 2023-07-04 22:49:27作者: hyserendipity

2761. 和等于目标值的质数对

Description

Difficulty: 中等

Related Topics:

给你一个整数 n 。如果两个整数 xy 满足下述条件,则认为二者形成一个质数对:

  • 1 <= x <= y <= n
  • x + y == n
  • xy 都是质数

请你以二维有序列表的形式返回符合题目要求的所有 [xi, yi] ,列表需要按 xi非递减顺序 排序。如果不存在符合要求的质数对,则返回一个空数组。

注意:质数是大于 1 的自然数,并且只有两个因子,即它本身和 1

示例 1:

输入:n = 10
输出:[[3,7],[5,5]]
解释:在这个例子中,存在满足条件的两个质数对。 
这两个质数对分别是 [3,7] 和 [5,5],按照题面描述中的方式排序后返回。

示例 2:

输入:n = 2
输出:[]
解释:可以证明不存在和为 2 的质数对,所以返回一个空数组。 

提示:

  • 1 <= n <= 106

Solution

Language: ****

class Solution:
    def findPrimePairs(self, n: int) -> List[List[int]]:
        res = []

        is_prime = [True] * (n + 1)
        is_prime[0] = is_prime[1] = False


        for i in range(2, n + 1):
            if is_prime[i]:
                for j in range(i * i, n + 1, i):
                    is_prime[j] = False

        for x in range(2, n - 1):
            y = n - x
            if y < x: break

            if is_prime[x] and is_prime[y]:
                res.append([x, y])
        
        return res