題目連結:
題目大意:
給定一個 X ( 2 ≦ X ≦ 2147483647 ),判斷 X 是否為質數。
註:測試資料最多有 200000 筆。
範例輸入:
13
14
範例輸出:
質數
非質數
解題思維:
除了建表(要壓常數時間,不然會超時)以外,可以使用「米勒-拉賓質性判定法」(Miller–Rabin Primality Test),在
WIKI 有相當完善的說明和證明。(建議可以先去過目一下,理解原理)
而一般情況來說,「米勒-拉賓判定法」並非確定性演算法(只能判斷出是合數,或是可能是質數)。但是有人求出了有號 32 位元整數範圍(2147483647)內,只要判斷 a = 2 、 7 、 61 這三種情況即可確定出是否為質數。
而且這個演算法的時間複雜度為 O( k × log ^ 3(n)),k 是我們測試的 a 值。也就是說,很快。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。