我在优化这个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;
}
}
}
答案 0 :(得分:0)
我看到的一个非常简单的优化是你可以做到:
$item += 2;
因为偶数从不是素数(2除外)。
一个非素数相关优化是跟踪您找到的素数而不是每次都重新评估count($history)
。