for($i=1;$i<=2004;$i++)
 if(date("L" , mktime(0,0,0,1,1,$i))
   echo $i."是闰年";未经测试:D

解决方案 »

  1.   

    <?php
    function sign($n) {
      if($n == 0) return 0;
      return abs($n)/$n;
    }function test($m,$n) {
      $sum = 0;
      for($y=$m;$y<=$n;$y++)
        if(sign($y%4)-sign($y%100)+sign($y%400) == 0)
          $sum++;
      echo "从{$m}到{$n}共有{$sum}个闰年";
    }test(1900,2004);?>
    由于历法的变动,能否从1年算起需要证明
      

  2.   

    嘿嘿shuzai被淘汰,1,循环2004次,效率不行,2,mktime有限制
     the range of valid years includes only 1970 through 2038. 
      

  3.   

    xuzuning(唠叨)也被淘汰,循环次数的问题
      

  4.   

    function leapyear($first,$last){
        $years = $last-$first+1;
    $num =intval($years/4);
    $remain =$years%4;
    $array[] =array(0,$first,$first+1,$first+2);
    if(($array[$remain]%4 - $remain +1)<=0){
    $num++;
    }
        return $num;
    }
        
      
      

  5.   

    <?
    function leapyear($first,$last){
    if($last<$first){
    $pp = $last;
    $last = $first;
    $first = $pp;
    }
        $years = $last-$first+1;
    $num =intval($years/4);
    $remain =$years%4;
    $array =array(0,$first,$first+1,$first+2);
    if(($array[$remain]%4 - $remain +1)<=0){
    $num++;
    }
        return $num;
    }?>
      

  6.   

    /**
    *   函数名称:  getleap
    *   函数功能:  取得闰年数组
        闰年条件
        ① 能被4整除,但不能被100整除
        ② 能被4整除,且能被400整除
    *   输入参数:
                $start ------------- 起始年份
                $end --------------- 结束年份*   函数返回值:    array
    *   其它说明:  说明
    */
    function getleap($start,$end)
    {
        $arr = array();
        for($i=$start; $i<=$end; $i++)
        {
            if($i%400==0||($i%4==0&&$i%100!=0))
            {
                $arr[] = $i;
            }
        }
        Return $arr;
    }$aget = getleap(4,2004);
    print_r($aget);
      

  7.   

    偶然兄也来啦?
    你这个好像也循环了$end-$start+1次啊
      

  8.   

    代码不写了,写个自然语言描述的伪代码吧~~~function getleap($start, $end)
    {
      计算 $start 距它前一个润年有几年(3>= 结果1 >=0)
      计算 $end 距它前一个润年有几年(3>= 结果2 >=0)
      getleap = $start - $end + 结果1 - 结果2 + 1
    }计算某年距它前一个润年有几年很简单吧?除出来的余数合适就合适~~~~
      

  9.   

    mikespook(谁说叫Mike的一定是狼?) 也不对啊,没考虑100和400
    1800年和1900年不是闰年,2000年是闰年
      

  10.   

    简化问题:2数间能被4整除得数有多少个?
    问题分析:
    1 结果判断:2中结果:intval($y%4)和intval($y%4)+1。
    2 状况分类判断:2类:(1)$y%4=0,结果唯一intval($y%4)
                         (2)$y%4!=0,结果不定
    3 讨论(2):利用结论(1)截除情况(2)的数列,剩余元素个数为1-3个。
                 情况分析,归纳:看剩余这几个元素有无能被4整除得数。
                                 归纳得判断公式--($array[$remain]%4-$remain +1)<=0?
    4继续归纳:考虑$y%4=0情形,得出共性。就得出上述方法了:)至于真正的闰年算法,赫赫,想想办法补上吧。(俺太懒)
      

  11.   

    判断两数之间有多少个能被4整除的不用循环
    $y=100;
    $x=1;
    $t=($y-$x+1);
    $n=intval($t/4);
    $n=$t%4?($y%4?$n+0:$n+1):$n+0;
    echo $n;
    四个连续的整数之中必定有且只有一个4的整数
    然后再判断最后一个数是不是4的整数
      

  12.   

    ashchen(陈辉) :
    你的错了,如果是x=4,y=9呢?
    有看我的么?我好像没有用循环吧?赫赫
    另外,求闰年时,考虑一下,是套用我那种方法好,还是你们的循环好,那种好就用那种3。
    目前你们写得好象计算量都很大。跟年限差关系很大哦
    用循环遍历是最好不要采用的办法再加个参数$n就可以求被$n整除得个数了还有,大家讨论下求素数有什么好办法?最基本的去除2以外的偶数检查。接下来还有什么方法可以减少计算量???
      

  13.   

    上面的确错了,下面是正确的,($t%4>$y%4?$n+1:$n+0)这个比较巧妙,只要总数取4的模大于最后一个数取4的模肯定 能被4整除。
    $y=9;$x=4;
    $t=($y-$x+1);
    $n=intval($t/4);
    $n=$t%4?($t%4>$y%4?$n+1:$n+0):$n+0;
    echo $n;写成函数就是
    function fun($x,$y,$j)
    {$t=($y-$x+1);
    $n=intval($t/$j);
    $n=$t%$j?($t%$j>$y%$j?$n+1:$n+0):$n+0;
    return $n;}都验证一下看对不对
      

  14.   

    $x=1900;
    $y=2004;
    $t=($y-$x+1);
    $n=intval($t/4);
    $n=$t%4?($t%4>$y%4?$n+1:$n+0):$n+0;
    echo $n;结果为27
    按闰年的约定,1900-2004间只有26个
    你把1900也算作闰年了
      

  15.   

    那个只是能被4整除的算法,下面是应该是最简单最搞笑计算闰年方法
    $x=1;$y=1004;
    function fun($x,$y,$j)
    {$t=($y-$x+1);
    $n=intval($t/$j);
    $n=$t%$j?($t%$j>$y%$j?$n+1:$n+0):$n+0;
    return $n;}
    echo fun($x,$y,4)-fun($x,$y,100)+fun($x,$y,400);
      

  16.   

    上面那个运行时间:8.9000000000006E-005486秒
    xuzuning(唠叨) 的运行时间是:0.015689秒至于质数的算法,实在想不出更好好的。
    不过能被4整除的肯定能被2整除
      

  17.   

    ashchen(陈辉) :
    嗯。你那个是很不错。要是我的的话就只能是(4-$first%4)%4<$years%4...555555555555
    赫赫。归纳的彻底。赫赫。 xuzuning(唠叨) :大大不好意思哈,俺跑题了。讨论简化问题去了。还有,大家讨论下求素数有什么好办法?最基本的去除2以外的偶数检查。接下来还有什么方法可以减少计算量???
      

  18.   

    函数再简化一下,估计可以写到标准函数库里了,绝对高效率
    function fun($x,$y,$j)
    {$t=($y-$x+1);
    $n=intval($t/$j);
    if($t%$j && $t%$j>$y%$j) $n++;
    return $n;}
      

  19.   

    xuzuning(唠叨) :
    一次循环???
    老大给具体讲讲吧