好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

使用PHP求最大奇约数的和

本篇文章介绍一下使用PHP如何求最大奇约数的和。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

小易计算这个问题遇到了困难,需要你来设计一个算法帮助他。

<?php
$num = trim(fgets(STDIN));

function jNum($num){
   $m = $num/2;
   $res = 1;
   if($num&0x1 == 1){//如果他本身就是个奇数,那么他的最大奇约数就是他本身
 $res = $num;
 goto HELL;
   }
   for($i = 1; $i<=$m; $i=$i+2){//如果不是,那么就从1开始一直往上除,每次+2(奇数)
 if($num%$i==0){
    $res = $i;
 }
   }
   HELL:
   return $res;
}

function jNum2($num)
{
   $res = 0;

   for($i=1;$i<=$num;$i++){
 if(($i&0x1) == 1){//如果他本身就是个奇数,那么他的最大奇约数就是他本身
    $res+=$i;
 }else{
    $n = $i;
    while(true){//优化,从最大的数开始往下除
  $n = $n>>1;
  if(($n&0x1) == 1){
$res+=$n;
break;
  }
    }
 }
   }

   HELL:
   return $res;
}

function jNum3($num){//公式法
   if($num == 1){
 return 1;
   }
   if(($num&0x1) == 0){
 return jNum3($num>>1)+$num*$num/4;
   }else{
 return jNum3($num-1)+$num;
   }

}
//$sum = 0;
//for($i = 1; $i<=$num; $i++){
// $sum+=jNum($i);
//}
//echo $sum;

//echo jNum2($num);

echo jNum3($num);

推荐学习:PHP视频教程

以上就是使用PHP求最大奇约数的和的详细内容,更多请关注Gxlcms其它相关文章!

查看更多关于使用PHP求最大奇约数的和的详细内容...

  阅读:42次