私はあなたに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] =斧を満たすことができません。
証明されました
だから我々は、複雑性理論、それの最小値をスクリーニングする方法プライムの数を持っています!