埃氏筛

当我们遇到一些情况,需要筛选出素数,但是用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