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