PHP判断素数,循环,筛选——默认可执行时间秒数,默认可执行空间。用来测试运行效率...

循环:

效率较低,运行时间过长,默认不能超过30秒,测试中可以更改默认值。

1.php.ini中:max_execution_time = 30

2.在程序的顶部加入如下代ini_set('max_execution_time','100');以上设置的为100秒,你也可以设置为0,那么就是不限制执行的时间

3.使用set_time_limit() 函数

在程序的顶部加入:set_time_limit(100);则表示最大执行 时间设置为了100秒,当然也可以将参数设置为0,意思同上。set_time_limit 函数特别说 明:void set_time_limit ( int $seconds ) 该函数的作用是设置允许脚本运行的时间,单位为秒。如果超过了此设置, 脚本返回一个致命的错误。默认值为30秒,或者是在php.ini的max_execution_time被定义的值,如果此值存在。当此函数被调用 时, set_time_limit()会从零开始重新启动超时计数器。换句话说,如果超时默认是30秒,在脚本运行了了25秒时调 用 set_time_limit(20),那么,脚本在超时之前可运行总时间为45秒。当php运行于安全模式下时,此功能不能生效。除了关闭安全模式 (在 php.ini 中将 safe_mode 设置为 off)或改变 php.ini 中的时间限制,没有别的办法。案例:如果没有打开安全模式, 设置程序运行时间为25秒。例如:

 

 

 

12if(!ini_get('safe_mode')){
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,'&nbsp';
    }
}

//测试效率
$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,'&nbsp';
        }
    }
}

//测试效率。microtime
$a =microtime();
getPrime($_GET['n']);
echo '<br>';
$e =microtime();

echo $e-$a;

 

转载于:https://www.cnblogs.com/echo0821/p/5269653.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值