本文主要介绍的是“埃氏筛法”。

素数筛法的关键在于一个“筛”字。其基本思路是,从2开始,对所有的素数,筛去它所有的倍数。我们唯一需要知道的是2是一个素数。

设置一个整型数组prime[],用来装对应的素数,一个布尔型数组p[],判断每一个数是否为素数,是的话就是false,不是的话值为true。设置一个pNum统计素数的个数。

从2开始,因为2是素数,所以把2装进prime,并将2的倍数,4,6,8,10…所对应的p[2],p[4],p[8],p[10]…的布尔值全部改为true。pNum的值加1。接下来是3,p[3]此时的值依然是false,则把3装进prime,并将3的倍数,6,9,12…对应的p[6],p[9],p[12]…的布尔值改为true。pNum的值加1。接下来是4,p[4]此时的值是true,说明它不是素数。接下来是5,p[5]此时的值是false,说明它是素数,则将5的倍数,10,15,20…对应的p[10],p[15],p[20]…的值改为true,pNum的值加1。…接下来的过程也是类似的。从小到大遍历到某数a的时候,若p[a]还是false,表示a并没有被筛去,也就是说小于a的数中没有a的因子,所以a就一定是一个素数。

最后附上本文的Java代码。


maximusyoung007
0 声望0 粉丝