↓快轉到主要內容
  1. LeetCode/

LeetCode 2761: Prime Pairs With Target Sum

·1 分鐘· ·
LeetCode Medium Math Number-Theory Sieve Enumeration Array
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: medium 第一次嘗試:2026-10-12

  • 提交紀錄:Accepted(一次通過)

解題思路
#

  1. 篩出 < n 的所有質數(n 到 10^6,篩法比逐一試除快)。
  2. x 從 2 到 n / 2:x 和 n - x 都是質數,[x, n - x] 就是一對。x <= n - x,結果自然依 x 遞增排序。

我的解法
#

我 AC 的版本是線性篩之後,在質數列表上用對撞指針找和是 n 的配對(跟 Two Sum II 一樣),跑了 5.7 秒。直接查 is_prime[n - x] 更簡單:

from math import isqrt

class Solution:
    def findPrimePairs(self, n: int) -> List[List[int]]:
        if n < 4:
            return []
        is_prime = [False, False] + [True] * (n - 1)
        for i in range(2, isqrt(n) + 1):
            if is_prime[i]:
                for j in range(i * i, n + 1, i):
                    is_prime[j] = False
        return [[x, n - x] for x in range(2, n // 2 + 1) if is_prime[x] and is_prime[n - x]]

複雜度
#

時間 O(n log log n),空間 O(n)。

要特別避免的錯誤
#

  • x 只要到 n / 2,不然同一對會出現兩次。
  • [5, 5] 這種兩個一樣的也算。

面試口說整理
#

我用埃氏篩找出 n 以內的質數,再讓 x 從 2 走到 n / 2,x 和 n - x 都是質數就加進答案,順序自然是遞增的。時間 O(n log log n)。

相關文章

LeetCode 2523: Closest Prime Numbers in Range
·1 分鐘
LeetCode Medium Math Number-Theory Sieve Array
LeetCode 2523 解題筆記:篩出範圍內的質數,相鄰的兩個質數才可能是最接近的;也可以從 left 往右試除,找到差是 2 的雙生質數就停
LeetCode 3618: Split Array by Prime Indices
·1 分鐘
LeetCode Medium Math Number-Theory Sieve Array
LeetCode 3618 解題筆記:判斷的是 index 是不是質數;用埃氏篩一次算出 0..n-1 哪些是質數,比每個 index 試除快
LeetCode 204: Count Primes
·1 分鐘
LeetCode Medium Array Math Enumeration Number-Theory
LeetCode 204 解題筆記:埃氏篩,只用質數 p 從 p² 開始把倍數劃掉,外層只要到 √n
LeetCode 1998: GCD Sort of an Array
·2 分鐘
LeetCode Hard Math Number-Theory Union-Find Sieve Sorting Array
LeetCode 1998 解題筆記:同一個連通塊裡的數可以任意交換;用 SPF 把數字跟質因數合併,排序後每個位置的新舊數字在同一組就能排好
LeetCode 3984: Divisible Game
·2 分鐘
LeetCode Medium Dynamic-Programming Kadane Math Number-Theory Enumeration
LeetCode 3984 解題筆記:k 是合數時,換成它的質因數只會更好(能整除的更多、k 更小),所以只要試每個數的質因數加上 2;每個候選 k 跑一次 Kadane
LeetCode 2709: Greatest Common Divisor Traversal
·2 分鐘
LeetCode Hard Math Number-Theory Union-Find Sieve Gcd Array
LeetCode 2709 解題筆記:任兩個 index 都能互通 ⇔ 全部在同一個連通塊;用 SPF 分解質因數,數字跟它的質因數在 Union-Find 裡合併;1 要特別處理