リニアふるいのリハビリテーションプログラム

 

私はあなたにn個を与える場合は、あなたがすべてのn個の出力よりも小さい素数ましょう、あなたはどのように行うのでしょうか?

最善のアプローチは、列挙型を考え、そして複雑さはO(n *√N)をテストすることです

 

行うには良い事はありませんこと?

最小複雑さの理論は、それを達成するために、nは?

私たちは、以下のコードを見てみましょう。

 

1つのインラインボイドpre_(){
 2      ためint型 I = 2 ; I <= N; iは++)PP [I] = 1 ; [PP 1 ] = 0 ; // PP iが素数であるか否かをデジタル記録、アレイをBOOLします以降、画面の前に我々は2デフォルト両方の素数である
 3。     ためint型 I = 2 ; I <= N; Iは++ ){
 4          IF(PP [I])プライム[++ TOT = I; //数が素数である場合、彼は、プライム配列に置く
 5。         ためINT J = 1。 ; J <&&プライムTOT = [J] * I <= N; J ++ ){          
 6。              PPは= [Iが素数[J] *] 0を; //ふるい
 7              IF(!)(I%プライム[J])BREAK ; //キー線形最適化の目的を達成するために、
 8          }
 9      }
 10 }

 

なぜそれを直線的ですか?

私たちは二つのことを証明する必要があります。

1、各複合数が選別されます

図2に示すように、各合成数は、ふるいによってスクリーニングされます

 

私たちは、それぞれの番号が分解A2を組み合わせた* ... * * A1 A のn形。(式-A1 N-素数、A1 <A2 <... < N-

1の場合:私は、A3 * ... * * A2 Aのときのn時間、プライム[j]がA1で、数が選別されます

2:(!= X. 1)プライム[J] = AX、I = A1 * ... * X.の1- * A 。X + 1 * ... * N-、いつからプライム[J] =それはとき、A1、およびA1 <斧ループから抜け出すますので、画面のための他の機会の数が存在しないように、それは、Jプライム[J] =斧を満たすことができません。

証明されました

 

だから我々は、複雑性理論、それの最小値をスクリーニングする方法プライムの数を持っています!

おすすめ

転載: www.cnblogs.com/zub23333/p/11495648.html