筛选法挑选素数

挑选素数按照常规方法就是循环判断,这种方法比较容易想到,但是当我们用这个方法在一个很大的范围内挑选素数的时候,就显得效率太低了,这个时候,我们需要用筛选法来挑选素数,减少时间复杂度。


筛选法大概原理:比如对于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即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值