素数スクリーニング(エッペンドルフ線形メッシュふるいです+)

1.エリクセンふるい法

理論的根拠:小から複数素数一般的な雑草うちのそれぞれの
数はすぐにそれの前の画面数でない場合は、それは素数でなければなりません。
理由:それは2の前ではない〜P-1の数の任意の倍数で、それは素数であります

時間の複雑さ:N *ログ(ログ(n))は、ほぼ直線

const int N = 1e6+5;
bool isprime[N];
int prime[N];
int cnt;
void init(int n)
{
    isprime[1]=true;
    for(int i=2;i<=n;i++)
    {
        if(!isprime[i])
        {
            prime[++cnt]=i;
            for(int j=i+i;j<=n;j+=i)
                isprime[j]=true;
        }
    }
}

2.リニアふるいです

理論的根拠:これは、各番号が一度にスクリーニングされ、のみ選別各素因数の最小数であり、時間の複雑さはO(N)であります

const int N = 1e6+5;
bool isprime[N];
int prime[N];
int cnt;
void init(int n)
{
    isprime[1]=true;
    for(int i=2;i<=n;i++)
    {
        if(!isprime[i])
           prime[cnt++]=i;
        for(int j=0;prime[j]<=n/i;j++)
        {
            isprime[prime[j]*i]=true;
            if(i%prime[j]==0)
                break;
        }
    }
}

おすすめ

転載: blog.csdn.net/weixin_43693379/article/details/94362848