埃拉托斯特尼筛法,简称埃氏筛或爱氏筛,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把小于等于根号n的所有素数的倍数剔除,剩下的就是素数。
这是什么意思呢?
以100为例,我们先创建一个拥有101(0-100)个数字的数组。
先使用最小的素数2,将所有2的倍数(除2本身)标记为合数。
接下来2+1的数是3,此时检查3是不是素数,检查标记,发现没有被标记为合数(因为不是2的倍数),所以再将所有3的倍数标记为合数。
下一个数是4,发现它已经被标记为合数,所以他可以表示为某一个小于4的素数的乘积(2*2),所以4的倍数必定含有因子2,所以所有4的倍数已经全部被标记过,直接跳过4。
下一个数是5,没有被标记为合数,把所有小于等于100的5的倍数标记为合数
………
这样一直计算到sqrt(100),即10。
那么为什么就在10这个地方停止了呢?数11呢?因为所有的小于n的11倍数已经被标记过了,例如22,33,44,55…分别有因子2,3,4(2*2),5,而唯一可能没有被标记的数11*11已经超过n了。