ふるい要素 - 複雑交換スペース効率的なアルゴリズムの時間計算

ふるい要素 - 複雑交換スペース効率的なアルゴリズムの時間計算

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は素数ではないことを示しています。

公開された14元の記事 ウォン称賛11 ビュー3735

おすすめ

転載: blog.csdn.net/weixin_43715601/article/details/103990495