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