【问题标题】:Project Euler #5 php doubt!Project Euler #5 php 疑问!
【发布时间】:2009-02-03 09:29:59
【问题描述】:

problem euler #5

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

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

【问题讨论】:

  • 抱歉我要修复帖子
  • 将“euler5”重新标记为“project-euler”

标签: php performance for-loop


【解决方案1】:

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

应该是

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

【讨论】:

    【解决方案2】:

    我会从最小的数字到最大的数字。因为如果一个数能被 14 整除,它也能被 2 整除。

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

    通过这样做,您可以尽早排除数字。

    【讨论】:

    • 好吧,它可以双向切割......它可能会通过较小数字(2、3 等)的测试,但无法通过较大数字的测试。如果您可以仅分离出 2 到 14 的主要因素并仅用这些因素测试可分性,那么它可能会更快一些
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我认为这是由于 PHP 的解释器开销(它必须解析和执行 for 循环)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-13
        • 2020-03-17
        • 2010-09-17
        • 2010-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-11
        相关资源
        最近更新 更多