加入收藏 | 设为首页 | 会员中心 | 我要投稿 济源站长网 (https://www.0391zz.cn/)- 数据工具、数据仓库、行业智能、CDN、运营!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

运用PHP求最大奇约数的和

发布时间:2022-06-24 23:05:37 所属栏目:PHP教程 来源:互联网
导读:本篇文章介绍一下使用PHP如何求最大奇约数的和,有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 小易是一个数论爱好者,并且对于一个数的奇数约数十分感兴趣。一天小易遇到这样一个问题: 定义函数f(x)为x最大的奇数约数,x为正整数。
  本篇文章介绍一下使用PHP如何求最大奇约数的和,有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
 
  小易是一个数论爱好者,并且对于一个数的奇数约数十分感兴趣。一天小易遇到这样一个问题: 定义函数f(x)为x最大的奇数约数,x为正整数。 例如:f(44) = 11.
 
  现在给出一个N,需要求出 f(1) + f(2) + f(3)…….f(N)
 
  例如: N = 7
 
  f(1) + f(2) + f(3) + f(4) + f(5) + f(6) + f(7) = 1 + 1 + 3 + 1 + 5 + 3 + 7 = 21
 
  小易计算这个问题遇到了困难,需要你来设计一个算法帮助他。
 
  <?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);
  
  /

(编辑:济源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读