当我们遇到一些情况,需要筛选出素数,但是用for循环又太耗时,那可以用埃氏筛把一定量的素数给筛选出来。
代码如下:
int tot,maxn=
1000,pri[maxn];
bool is[maxn];
void Eratosthenes()
{
tot=
0;
memset(is,
1,
sizeof(
is));
//定义is数组中所有数都为1;即假设所有数都为素数,方便后面筛出素数
is[
0]=
is[
1]=
0;
//数字0和1的素数都为0
for(
int i=
2;i<maxn;i++
)
{
if(
is[i])
//如果是素数的话,is[]肯定为1
{
pri[++tot]=i;
//将素数存入pri数组中
for(
int j=i+i;i<maxn;j+=i)
//筛出不是素数的数
{
is[j]=
0;
}
}
}
}
转载于:https://www.cnblogs.com/RootVount/p/10022386.html