題目連結(jié):
題目意譯:
你被給定一整數(shù) n。兩個整數(shù) x 和 y 形成一個質(zhì)數(shù)數(shù)對,代表著:
1 ≦ x ≦ y ≦ n
x + y == n
x 和 y 為質(zhì)數(shù)
回傳一個二維已排序數(shù)對 [xi, yi] 列表。該列表應(yīng)以 xi 升序排序。如果不存在任何質(zhì)數(shù)數(shù)對,則回傳一個空陣列。
注: 一個質(zhì)數(shù)為一個大於 1 且只有兩個因數(shù),一個為 1、另一個為自身。
限制:
1 ≦ n ≦ 10 ^ 6
範例測資:
範例 1:
輸入: n = 10
輸出: [[3,7],[5,5]]
解釋: 在此例中,有兩個質(zhì)數(shù)數(shù)對滿足條件。
這些數(shù)對為 [3,7] 和 [5,5],而我們根據(jù)題目要求排序這些數(shù)對後並回傳。
範例 2:
輸入: n = 2
輸出: []
解釋: 我們可以證明沒有質(zhì)數(shù)數(shù)對可以得到總和值 2,所以我們回傳一個空陣列。
解題思維:
由於除了 2 以外的質(zhì)數(shù)都是奇數(shù)。而奇數(shù)加奇數(shù)會得到偶數(shù)。因此我們先處理 n 為奇數(shù)的情況。
可以看到此時唯一的可能是 2 + (n - 2) 且 n - 2 為質(zhì)數(shù)的情況。因此我們直接檢查 n - 2 是不是質(zhì)數(shù)。如果是,則其答案即為 [[2, n - 2]];反之則應(yīng)回傳空陣列。
再來是 n 為偶數(shù)的情況。可以看到 2 沒有解,因此直接回傳空陣列即可;而 n > 2 的偶數(shù)可以先建立質(zhì)數(shù)表(參見
這題),然後從 2 開始窮舉出所有 ≦ (n / 2) 的質(zhì)數(shù) p,並檢查 n - p 是不是質(zhì)數(shù)即可。這樣一來會照著題目要求的 xi 之值升序順序來得到所有質(zhì)數(shù)數(shù)對。
最後再回傳結(jié)果,即為所求。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。