埃氏筛选法(埃拉托斯特尼筛法)
埃氏筛选法对于筛选整数n以内的素数,算法是这么描述的:先把素数2的倍数全部删除,剩下的数第一个为3,再把素数3的倍数全部删除,剩下的第一个数为5,再把素数5的倍数全部删除······直到把n以内最后一个素数的倍数删除完毕,得到n以内的所有素数。代码可以这么写:
这就是下面这位小可爱的观点:
线性筛选观察可以发现,上面的这种写法有很多次重复计算,这样显然无法做到线性筛选,而另外一种写法却可以得到线性筛选,达到时间复杂度为O(n),代码可以这么写:
Meissel-Lehmer算法这个算法可以说是黑科技级别的,它能够在3s内求出1e11之内的素数个数,据说还有在300ms内求出1e11的个数的。