一、埃氏筛法
首先将2到n范围内的所有整数写下来。其中最小的数字2是素数。将表中所有2的倍数都划去。表中剩余的最小数字是3,他不能被更小的数整除,所以3是素数。再将表中所有3的倍数都划去。如果表中剩余的最小数字是m时,m就是素数。然后将m的倍数都划去。依次类推,反复操作,就能依次枚举出n以内的素数

代码如下:
int prime[MAXN];//第i个素数
bool is_prime[MAXN+1];//is_prime[i]为true时表示i为素数
void init(){
int p=0;
for(int i=0;i<n;i++){
is_prime[i]=true;
}
is_prime[0]=is_prime[1]=false;
for(int i=2;i<=n;i++){
if(is_prime[i]){
prime[p++]=i;
for(int j=2*i;j<=n;j+=i){
is_prime[j]=false;
}
}
}
}

本文介绍了三种常见的素数筛选算法:埃氏筛法、区间筛法和欧拉筛法(线性筛法)。埃氏筛法通过不断去除已知素数的倍数来找到素数;区间筛法适用于特定区间内的素数查找;欧拉筛法则是一种高效的线性筛选方法。
最低0.47元/天 解锁文章
2222

被折叠的 条评论
为什么被折叠?



