质数判断

【问题】给定一个正整数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/

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