ふるい要素 - 複雑交換スペース効率的なアルゴリズムの時間計算
1、素数
プライムふるい法についての話、我々は最初の素数であるかについて話しています。
素数(またはプライム)は1以上の自然数を大きくない、そしてさらに1自体は、もはや他の要因の自然数です。
したがって、その定義に基づいて、我々は以下の結論を推論することができます:
1は1以上の自然数も大きくないので(1)は、素数ではありません。
(2)、素数は2つだけの要素1及び2、2によって即ちのみ1、2 2割り切れるため2、2です。
(3)、その二つの要因1自体に加えて、2以上の素数偶数大きくなければならないだけでなく、因子2を有していなければなりません。
(4)、偶数大きいので2が素数ではないので、2よりも大きい素数は奇数でなければならない必要がありますより。
(5)、素数の倍数でなければならない素数、なぜなら素数の倍数は、その後、Nの数の、N、Kの倍数で構成されると仮定の数これは、2つの要素1およびN、そこ係数kに加えて。
2、プライムスクリーニング - ふるい要素
上記結論に加えて、我々は知っている必要があり
、最大可能数N因子⌋⌊√nの独自の外に加えて(6)
(PS:「√」記号、アルトシフトを再生するために残されてもよいですキー、右のコード41420を入力してください)
後に上記の理論の埋蔵量で、我々は以下のコードを設計することができます。
#include<iostream>
using namespace std;
int prime[1000000];
void caculatePrime(){
prime[0] = prime[1] = 1;
for(int i = 2; i*i <= 1000000; i++){
if(!prime[i]){
for(int j = i*i;j <= 1000000; j += i){
prime[j] = 1;
}
}
}
}
int main(){
caculatePrime();
int n;
cin >> n;
for(int i = 1;i <= n; i++){
if(!prime[i])
cout << i << endl;
}
}
素数が配列プライム1から1000000グローバル変数、プライム[I] = 0に格納されていると私は素数、素数[I] = 1であることを示し、iは素数ではないことを示しています。