判断素数的算法

来源:互联网 发布:win10无法修改mac 编辑:程序博客网 时间:2024/04/19 11:44

最近在学习数据结构和算法,在一本电子书上看到一个打印素数的程序,随后上网搜了一下关于素数的算法。总结了以下两种解法。

 

解1:利用“埃拉托色尼筛”算法打印1~MAX之间的素数,此算法可用于打印一定范围内的素数。数组primes作为是否为素数的标志位,其索引为所要判断的数值。通过for循环,依次将j=2、3、4...的倍数判为合数(即赋予prime数组元素为0),由于n=j*j-1在之前的循环中已经出现过,为此我们可以从n=j*j开始;再结合“如果一个数是合数,那么它的最小质因数肯定小于等于他的平方根”这条定理,我们可以得到,1~MAX之间任何一个合数都可以被某个小于它的平方根的一个数整除,因此我们将j<=sqrt(MAX)作为循环结束条件,以进一步减少多余的循环。

程序如下:

此程序的缺点是无法定位的去判断某一个数是否为素数。如果要实现这样的算法,参照解2。

 

解2:此算法用于打印从1开始的具体数目的素数。通过标志位found判断是否添加新的素数到数组中,同样用到了和解1相同的定理“如果一个数是合数,那么它的最小质因数肯定小于等于他的平方根”。

程序如下:

可以看出,此解法可以很好的判断某一个数trail是否为素数。

原创粉丝点击