循环:
效率较低,运行时间过长,默认不能超过30秒,测试中可以更改默认值。
1.php.ini中:max_execution_time = 30
2.在程序的顶部加入如下代ini_set('max_execution_time','100');以上设置的为100秒,你也可以设置为0,那么就是不限制执行的时间
3.使用set_time_limit() 函数
3 set_time_limit(25);
4}
function getPrime($n){
//得到数,依次判断
for($i=2;$i<=$n;++$i)
{
for($d=2,$sqrt=sqrt($i);$d<=$sqrt;++$d)
{
if($i%$d == 0)
{
//不是素数
continue 2;
}
}
//for结束时素数
echo $i,' ';
}
}
//测试效率
$a =microtime();
getPrime($_GET['n']);
echo '<br>';
$e =microtime();
echo $e-$a;
筛选:
以空间换速度。默认可执行空间为memory_limit=128M; 可以在php.ini中修改默认值。
<?php
function getPrime($n){
//分配默认标识
$list = array_fill(2,$n-1,1);
//获得所有可能的筛选数
for($d=2,$sqrt=sqrt($n);$d<=$sqrt;++$d){
//再判断是否是已知素数
if($list[$d]==1){
//筛选,当前$d的倍数,都置0
for($i=$d+$d;$i<=$n;$i+=$d){
$list[$i] = 0;
}
}
}
//将素数从list内摘出!
foreach($list as$key=>$value){
if($value==1){
echo $key,' ';
}
}
}
//测试效率。microtime
$a =microtime();
getPrime($_GET['n']);
echo '<br>';
$e =microtime();
echo $e-$a;