丑数--Ugly Number

来源:互联网 发布:mysql create 编辑:程序博客网 时间:2024/05/23 12:50

丑数--Ugly Number:整数因数分解只包含2,3,5的数

思路一:将待测整数不断的进行2,3,5的分解,如果最终的数为1,该数便是丑数。

思路二:利用筛选法求解丑数,2、3、5的倍数可能是丑数,在2、3、5倍数中去掉不是丑数的剩余的全是丑数。丑数的丑数倍数便是丑数,将丑数再乘上一个丑数,得到的结果一定会是丑数。采用这样的方法可以把一定范围的丑数全部得到。

import java.util.Scanner;/** * 因子只包含2、3、5的数称为丑数 * @author Administrator * */public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);while(sc.hasNext()) {//boolean isUglyNumber = IsUglyNumber(sc.nextInt());//System.out.println(isUglyNumber);int num = sc.nextInt();boolean[] isUgly = new boolean[num+1];ContinueUglyNumber(num,isUgly);for(int index = 2; index <= num; ++index) {if(isUgly[index])System.out.print(index+" ");}System.out.println();}}// 暴力求解,每个数都要进行计算。public static boolean IsUglyNumber(int num) {while(num%2 == 0) num /= 2;while(num%3 == 0) num /= 3;while(num%5 == 0) num /=5;if(num == 1) return true;return false;}// 筛选法进行丑数的查找public static void ContinueUglyNumber(int num,boolean[] isUgly) {isUgly[2] = true;isUgly[3] = true;isUgly[5] = true;int index2 = 1;int index3 = 1;int index5 = 1;while(index2*2<=num) {if(isUgly[index2]) isUgly[index2*2]=true;index2++;}while(index3*3<=num) {if(isUgly[index3]) isUgly[index3*3]=true;index3++;}while(index5*5<=num) {if(isUgly[index5]) isUgly[index5*5]=true;index5++;}}}