100の内の素質を求めてそして出力します
8343 ワード
初めての面接問題の問題があったので、今日はたまたま整理してみました.
その時最も基本的なアルゴリズムを使って書いて、2つのfor循環、1つ1つ余剰を取って、質数は結果の配列の中に入れます
コードは以下のように,コード実行時間をチェックするコードは,3つの異なるアルゴリズムの優劣性を比較するために用いられる.
アルゴリズム1:それぞれの数はすべて2から除いて、すべての自分より小さい整数を除いて、もし整除することができることがあるならば、説明は質数ではありませんて、今回の循環を脱退して、次の循環を行います
その時最も基本的なアルゴリズムを使って書いて、2つのfor循環、1つ1つ余剰を取って、質数は結果の配列の中に入れます
コードは以下のように,コード実行時間をチェックするコードは,3つの異なるアルゴリズムの優劣性を比較するために用いられる.
アルゴリズム1:それぞれの数はすべて2から除いて、すべての自分より小さい整数を除いて、もし整除することができることがあるならば、説明は質数ではありませんて、今回の循環を脱退して、次の循環を行います
function test()
{
$start = microtime(true); //
// true !!!
// true !!!
// true !!!
$array = array(); //
for ($i=2; $i < 40001; $i++) {
$mark = 0; // 0 , 1
for ($j=2; $j < $i; $j++) {
if(($i % $j) === 0)
{
$mark = 1; // ,
break;
}
}
if($mark != 1)
{
$array[] = $i; //
}
}
echo "";
print_r($array);
echo "
";
echo microtime(true)-$start;
}
は てアルゴリズムを させてくれました.その 、 のコードはbreakさえなかったようです.それからbreakを して、 に を ていました.
ははは、そして の を することができます~
しかし、 の はまだよくて、 に より1 さい を く はありませんと えてくれました. の の は を いて です.
そして は、この の を けばいいと って、 えば17から4を けばいいです. が を えた 、 と の を さまにしただけで、 り しだからです.
アルゴリズム2:2 のforサイクルの$iをsqrt($i)に き える はほとんど しないfunction test1()
{
$start = microtime(true);
$array = array();
for ($i=2; $i < 40001; $i++) {
$mark = 0;
for ($j=2; $j <= sqrt($i); $j++) {
if(($i % $j) === 0)
{
$mark = 1;
break;
}
}
if($mark != 1)
{
$array[] = $i;
}
}
// echo "";
// print_r($array);
echo "";
echo microtime(true)-$start;
}
もちろんもう つのアルゴリズムがありますが、 は ですか? は ですか.
とは、 と1 は も けることができず、 が であり、 は ず に じて ることができる.
このルールにより、$iが より さい を できるかどうかを べるだけで、 を てることができます.(この の はアルゴリズム2ほど くない)
アルゴリズム2と み わせて、$i より さい だけを べることもできます(この の はアルゴリズム2よりも くなります)
アルゴリズム3:このアルゴリズムは が も いfunction test2()
{
$start = microtime(true);
$queue = array(); // , ,
$queue[] = 2;
for ($i=2; $i < 40001; $i++) {
$mark = 0;
foreach ($queue as $key => $value) {
// $i
if($value >= sqrt($i))
{
break;
}
//foreach , , $i ,
if(($i % $value) === 0)
{
$mark = 1;
break;
}
}
if($mark != 1)
{
$queue[] = $i; // $i , ,
}
}
// echo "";
// print_r($queue);
echo "";
echo microtime(true)-$start;
}
に できますtest();
test1();
test2();
とコードの を します. に に じてコメントを いたり じたりしてください.
:https://www.cnblogs.com/lz0925/p/9184001.html