剑指offer题解-小丑数
丑数就是只包含质因子2、3、5的正整数,则求随意给定m内的小丑数
一,思路
若m能为小丑数,则必有m=2ⁿ✖3ⁿ✖5ⁿ(n>=0). 我的思路是一个人若是只能被2、3、5整除,则可以以"(2、3、5)"三个除数并列为一个工具,只要能整除"(2、3、5)"其中一个,我们称之为能整除"(2、3、5)"只要m除以(2、3、5)其中一个能整除,则继续为之,至最后除以(2、3、5)能得1,则为小丑数,如若不然,除到最后不能为1甚至不能为整数,则不是。 此处先举两例 一为20,20除以(2,3,5)过程为,20/2=10,10/2=5,5/3不得整则跳过去除以5,及是5/5=1,则为小丑数 二为21,21除以(2,3,5)过程为,先21/2,结果不得整,则跳过去除以3,及为21/3=7,接着继续拿7除以(2、3、5),过程为,先7/2,不得整,则跳过去除以3,7/3,不得整,继续跳,7/5,不得整,则一轮下来都不得整,及不为小丑数。
二,步骤
所以综上所诉 第一步,构建一个for循环,从2开始,到给定数m结束,i++。 第二步,以(2、3、5)为一轮,判断i除以(2、3、5)能否整除,构建第二层循环 如能,则继续新的一轮直至最后要么整除得1,则为小丑数,可直接输出此数跳出第二层循环 要么无法整除,则不是,跳出第二层循环。 如一开始就不能(如11,17),则直接判定为不是小丑数,然后跳出第二层循环。 第三步,i++直到i==m时,第一层循环也结束了,此时将会输出1-m内的全部小丑数 注意点:1.因为i要用于判断整除(2、3、5)还要执行i++,则需取一中间变量代替,int n=m;
三、代码
容我先吃个饭然后开一把,再把代码补上