素数,是除了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