質數判斷

【問題】給定一個正整數n,如何判斷其是否質數呢?

1、方法一:最基本的,將其除以[2, squt(n)],只要有一個數可以整除就不是質數;

2、方法二:根據素數唯一分解定理:任何一大於1的整數均可以分解爲素數的乘積,若不考慮素數乘積的先後順序,則分解式是唯一的。

    由此可知,我們並不需要測試第一種方法裏的所有數字,而只需要提取其中的質數,如果要是用這個方法就需要先生成[2, squt(n)]範圍內的質數列表。

2.1、給定一個正整數x,列舉其中的所有質數

    針對此問題可以使用篩選法具體實現上看可以建立一個x大小的數組且全部初始化爲真。忽略1,從2開始,判斷髮現2是質數,於是將所有2的倍數標誌爲假;輪到3,發現3是質數,於是標記所有3的倍數爲假;忽略4;發現5是質數,於是標記所有5的倍數.....

    通過此方法即可得到[2, x]區間內的所有質數列表,通過這張表可以判斷[2, x^2]範圍內的正整數是否是素數。

3、方法三:Rabin-Miller算法

    這算法特麼的看不懂,還有出錯概率,有誰有興趣的自己參考以下資料吧:

    來自 @highyyy:http://blog.csdn.net/highyyy/article/details/6315559

    來自 @Panda_Ming:http://blog.csdn.net/panda_ming/article/details/7227222

    來自 @lxd:http://lxd6366.blog.163.com/blog/static/245542522010213115854564/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章