0

問題オイラー#5

私は解決策を見つけましたが、なぜこの最初のコードが速いのかわかりません(コードをより明確にするために14を入れました)唯一の違いは、私が書いたものを削除することです

if($num%14==0 && $num%13==0 &&$num%12==0 &&$num%11==0 &&$num%10==0 && $num%9==0 && $num%8==0 && $num%7==0 && $num%6==0 && $num%5==0 && $num%4==0 && $num%3==0 && $num%2==0 && $num%1==0){
    $notFound=0;
}

この2番目のコードが最初のコードよりも非常に遅いのはなぜですか?forを使用すると、より高速になると思います。他の言語でも同じですか?

$notFound=0;
for ( $i=14; $i>=2 && notFound==0; $i--){
    if($num%$i!=0){
        $notFound=1;
    }
}
4

4 に答える 4

2

for ( $i=14; $i>=2 && notFound==0; $i--){

する必要があります

for ( $i=14; $i>=2 && $notFound==0; $i--){

于 2009-02-03T09:39:27.820 に答える
2

最小の数から最大の数へと進みます。14で割り切れる数は2でも割り切れるからです。

$notFound = 0;
for ($i=2; $i<=14; $i++) {
    if ($num % $i !== 0) {
        $notFound = 1;
        break;
    }
}

こうすることで、数字をできるだけ早く除外することができます。

于 2009-02-03T09:45:55.733 に答える
0

これは、PHPでのインタープリターのオーバーヘッドが原因だと思います(forループを解析して実行する必要があります)。

于 2009-02-03T09:35:39.637 に答える
0

2番目のコードサンプルは、最初のコードサンプルよりも多くの操作を実行しているだけなので、遅くなると思います。forこの状況では、パフォーマンスは低下しますが、ループは読みやすさと保守性が大幅に向上することがわかります。

于 2009-02-03T09:42:14.523 に答える