0

问题欧拉 #5

我找到了解决方案,但我不知道为什么第一个代码更快(我放了 14 以尝试使代码更清晰)唯一的区别是我消除了 for 我写的一个巨大的 if

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;
}

为什么第二个代码比第一个慢得多?使用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

第二个代码示例只是执行比第一个更多的操作,所以我希望它会更慢。在这种情况下,您会发现虽然性能较差,但for循环提供了明显更好的可读性和可维护性。

于 2009-02-03T09:42:14.523 回答