挑选素数按照常规方法就是循环判断,这种方法比较容易想到,但是当我们用这个方法在一个很大的范围内挑选素数的时候,就显得效率太低了,这个时候,我们需要用筛选法来挑选素数,减少时间复杂度。
筛选法大概原理:比如对于2 而言,2本身是一个素数,那么只要能够整除2的数一定存在2这个因子,所以这个数一定不是素数,我们可以按照这样的原理,确定某个范围内,2+2,2+2+2,2+2+2+2等元素不是素数,做上标记,同样,对于3,我们也有,3+3,3+3+3,3+3+3+3等数不是素数,按照这种方法我们可以很快的挑选出素数来。
由以上原理可以大概了解程序框架,我们需要一个循环来控制诸如2,3这样的数来循环,需要一个循环来标记诸如2+2,2+2+2之类不是素数的数,于是框架就出来了。下面是代码。
//a[MAX]为实现定义好的一个数组,MAX是给定范围的上限。注意讲这个数组初始化为0,以后判断的
//时候,值为0则为素数,值不为0则不为素数,当然可以自己订自己的判断标准
int i,j;
for(i=2;i<sqrt(MAX);i++)
{
if(!a[i])
{
for(j=i*i;j<MAX;j+=i)
a[j]=1;
}
}
以上经过筛选后,判断一个数i是不是素数,只需要判断a[i]是否为0即可