有人可以帮我优化这个“请求素数”PHP函数

时间:2014-02-25 22:35:52

标签: php performance function optimization

我在优化这个PHP函数的性能时遇到了麻烦,因此应该返回所请求的前$ n个素数。请求是通过表单进行的,当我请求前10 000个素数时,执行超过30秒。时间限制并返回致命错误。如果你给我提示如何使功能更好,我将非常感激。

function fprimes($n){
    //The Primes Array
    $history = array(2,3);
    //number to be tested
    $item = 4;
    //Set indicator for primacy
    $build = 1;
    if($n == 0){
        echo "No primes requested!";
    }
    elseif($n == 1){
        echo "The first prime number is: ".$n;
    }
    elseif($n == 2){
        echo "The first ".$n." prime numbers are: </br> 1 </br> 2";
    }
    elseif($n > 2){
        while((count($history)+1)<$n){
            foreach($history as $prime){
                if($item%$prime!=0){
                    $build++;
                }
            }
            if((count($history)+1)==$build){
                $history[]=$item;
            }
            $build = 1;
            $item++;
        }
        echo "The first prime ".$n." numbers are: </br>1";
        foreach($history as $printPrime){
            echo "</br>".$printPrime;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我看到的一个非常简单的优化是你可以做到:

$item += 2;

因为偶数从不是素数(2除外)。


一个非素数相关优化是跟踪您找到的素数而不是每次都重新评估count($history)