小易计算这个问题遇到了困难,需要你来设计一个算法帮助他。
<?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其它相关文章!
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did55891