品質統計の数の数n未満のすべての非負の整数、エラトステネスのふるい

素数の定義:プライムは、また、素数を知られています。1を除いて、1以上の自然数であり、それ自体、着信番号は、他の自然の素数の数で割り切れません。

1.暴力アルゴリズム:

フラグが真であればiがn <とき、我々はすなわち、(I-1〜2)は、i%ように、素数2-iの反復処理、iは素数、カウンタ++である;そうでなければバウンスI = 2となるよう、私は++;次一度決定しました

 公共 INT countPrimes(int型N){
    int型I = 2; 
int型のカウント= 0;
ブール・フラグ= TRUE。
{(iがN <)しながら
{(; J <I J ++ INT J = 2)のための
(I%のJ == 0)であれば{
フラグ= FALSE。
ブレーク;
}
}
もし(フラグ== TRUE){
++数えます。
}
フラグ= TRUE。
I ++;
}
カウントを返します。
}

2.エラトステネスのふるいを使用して、長さnのブール配列を作成し、デフォルト値は偽である。我々は、次に、2から直接決意を開始する、すなわち画面に2により、左2,2複数除くオフしてから次の素数、すなわち3ふるい、3を残し、雑草アウト3の倍数と、次の次の素数5ふるいで、5、雑草5の倍数を残し、リピート行く.... すべてのスクリーニング私は不要な計算を減らすことができ、J <N、セットトゥーレを、*アウト数

時間の複雑さ:O(N * lglgn)

    パブリック 静的 INT countPrimes(int型N){
         ブール [] NUMS = 新しい ブール[N]。
        int型のカウント= 0 ;
        int型 ; iがN <I ++は、I = 2 ){
             場合(NUMS [I] == ){ 
                カウント ++ INT J = 2、J ++; iはJ <N * ){ 
                    NUMS [iが jは*] = 
                } 
            } 
        } 
        リターン回数、
    }

 

おすすめ

転載: www.cnblogs.com/jiezai/p/11221618.html