寻找丑数及关于程序优化效率的一点说明
一、问题描述 如果一个整数值含有因数2,3,5(包括1和该整数本身)的整数称为丑数(Ugly Number)。换句话说丑数ugly_number是可以表示成形如下面表达式的形式,表达式中的i,j,k均是大于等于0的整数。 举个例子,18 = 2 * 3 * 3,所以18是一个丑数。而14 = 2 * 7,所以14不是一个丑数。 现在有个需求就是要找到第2013个丑数。 二、问题分析 解决问题的思路显然是要根据丑数的性质。主要有两种思考的切入点。 第一种方法,按照整数正好三顺序一个一个找,并判断该整数是不是丑数,如果是丑数的个数加1,如果不是继续查找下一个,直到找到问题要求的第N个丑数即可,这种方法的效率不是很好,但是很好理解,所以在这里只给出伪代码。伪代码如下: while(i < N) if(true == judge_ugly_number(number)) i++; ugly_numbers[i] = number; number++; else number++; 判断一个数是否是丑数的伪代码如下: while(0 == number % 2) number /= 2; while(0 == number % 3) number /= 3; while(0 == number % 5) number /= 5; if(1 == number) reutrn true;