素数筛法

线性筛

    for(int i=2;i<=n;++i)
    {
        if(!vis[i])
        {
            for(int j=i;j<=n;j+=i)
            {
                vis[j]=1;
            }
        }
    }

艾氏筛法

int prime[MAXN],n;
void Prime(int n)
{
    int cnt =0;
    memset(prime,1,sizeof(prime));
    prime[0]=prime[1]=0;
    for(int i = 2; i <= n; i ++)
    {
        if(prime[i])
        {
            prime[++cnt] = i;
            cout <<prime[cnt]<<" ";
            for(int j = i*i; j <= n; j +=i)
            {
                prime[j] = 0;
            }
        }
    }
    return ;
}

欧拉筛法

for(i = 2; i <= n; i++)
{
    if(f[i] == 0)
    {
        p[++cnt] = i;
    }
    for(j = 1; j <= cnt; j++)
    {
        if(i * p[j] > n)break;
        f[i * p[j]] = 1;
        if(i % p[j] == 0)break;
    }
}

猜你喜欢

转载自www.cnblogs.com/tpgzy/p/8982691.html