素数の定義:プライムは、また、素数を知られています。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は*] = 真。 } } } リターン回数、 }