求N以内素数个数--粗暴方式及筛选法

本文介绍了求N以内素数个数的两种方法:粗暴遍历法和筛选法。粗暴法从2开始遍历到N,检查每个数是否能被整除,效率低下。筛选法则通过依次划去每个质数的倍数,高效地找出素数。当N较大时,筛选法表现出显著优势。
摘要由CSDN通过智能技术生成

素数,是除了1和它本身之外不再被其他的除数整除。

使用程序求N以内素数个数问题,在各种语言的基础教程中都会讲到。

一般而言,求取素数可以使用粗暴的从2开始遍历到自己,每次拿自己整除这些遍历的数,若可以整除,则不是素数并跳出循环。若遍历到自己都不能被整除,则是素数。

这种方法虽然简单,但是效率十分低下。有兴趣的可以测试一下程序,当N》=100000时,程序便会非常的慢了。

另外一种比较高效的方法是筛选法,它的具体思路是:

先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。
第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。
2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。
3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。
这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。

这种做法的效率与上面粗暴方式相比,高了不止一个数量级。

public static voi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值