有人能帮我优化一下吗;请求素数“;PHP函数
我很难优化这个PHP函数的性能,witch应该返回请求的第一个$n个素数。请求是通过表单发出的,当我请求前10000个素数时,执行时间超过了30秒。时间限制并返回致命错误。如果您能给我一些建议,告诉我如何使功能更好,我将非常感激有人能帮我优化一下吗;请求素数“;PHP函数,php,performance,function,optimization,Php,Performance,Function,Optimization,我很难优化这个PHP函数的性能,witch应该返回请求的第一个$n个素数。请求是通过表单发出的,当我请求前10000个素数时,执行时间超过了30秒。时间限制并返回致命错误。如果您能给我一些建议,告诉我如何使功能更好,我将非常感激 function fprimes($n){ //The Primes Array $history = array(2,3); //number to be tested $item = 4; //Set indicator fo
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;
}
}
}
函数fprimes($n){
//素数数组
$history=数组(2,3);
//待测数量
$item=4;
//设置首要指标
$build=1;
如果($n==0){
回声“不需要素数!”;
}
elseif($n==1){
echo“第一个素数是:”.$n;
}
elseif($n==2){
回显“第一个”$n。“素数是:12”;
}
elseif($n>2){
而((count($history)+1)我看到的一个超级简单的优化就是你可以做到:
$item += 2;
因为偶数永远不是素数(除了2)
一个与素数无关的优化是跟踪找到的素数的数量,而不是重新计算count($history)
每次。count
不应该比读取变量慢,它只是数组中的一个头字段,实际上不必线性计数。另一个优化是在大于sqrt($item)
时停止检查历史记录。有时明显的事情最难看到:)谢谢:)如果($item%$prime!=0){$build++;}否则{break;},您还可以在$item%prime==0时添加中断
:if($item%$prime!=0){$build++;}
-如果它分开,肯定不会是素数。是的,我很确定,foreach
是不好的,因为你只需要找到一个反例。我假设代码是这样做的,但我猜它不是。这也解释了为什么+=2
对性能有巨大影响。离题:1不是素数。我m sor是的,但这正是我被教导的方式:)每当出现质数是否为1的问题时,老师们就会陷入宗教辩论中:)