zoukankan      html  css  js  c++  java
  • 丑数查找算法

      我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数

    下面是一道在网络上广为流传的面试题,据说google曾经采用过这道题。

      所谓一个数m是另一个数n的因子,是指n能被m整除,也就是n % m == 0。根据丑数的定义,丑数只能被2、3和5整除。也就是说如果一个数如果它能被2整除,我们把它连续除以2;如果能被3整除,就连续除以3;如果能被5整 除,就除以连续5。如果最后我们得到的是1,那么这个数就是丑数,否则不是。

    基于前面的分析,我们可以写出如下的函数来判断一个数是不是丑数:

     1 <?php 
     2 function is_ugly($val){
     3     while($val%2==0)
     4         $val /= 2;
     5     while($val%3==0)
     6         $val /= 3;
     7     while($val%5==0)
     8         $val /= 5;
     9     return $val==1?true:false;
    10 }

    接下来,我们只需要按顺序判断每一个整数是不是丑数,即:

     1 function search_ugly($index){
     2     $num = 0;
     3     $count = 0;
     4     while($count<$index){
     5         if(is_ugly(++$num)){
     6             $count++;
     7         }
     8     }
     9     return $num;
    10 }
    11 echo search_ugly(500);

    我们只要调用search_ugly(500),就能获得第500个丑数

  • 相关阅读:
    特殊字符,如Emoji表情Base64存储到数据库
    判断文本文件的编码
    很多.net 程序员不知道又非常重要的 .net高级调试技巧.调试别人的dll方法内的变量
    没想到你是这样的Linux
    PDF转成txt
    生成云图
    Data collection (imaging)
    Python Conda 软件包升级
    电镜作业2的脚本版本
    电镜作业2
  • 原文地址:https://www.cnblogs.com/lpfuture/p/2947996.html
Copyright © 2011-2022 走看看