题目:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
丑数即:可分解为质数的乘积,且质数只能是2,3或5。
Java实现代码如下:
public class CheckUglyNumber{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
// 输入一个整数
int n = in.nextInt();
testUgly(n);
}
private static void testUgly(int n) {
int count = 0; // 记录是第几个丑数
for(int i=1;i<100000;i++){
if(i<=6){
count++;
} else if(isUglyNum(i)){
count++;
} else {
continue;
}
if(count == n){ // 寻找到第n个丑数时,输出该丑数
System.out.println(i);
break;
}
}
}
// 判断是否为丑数
public static boolean isUglyNum(int m){
boolean b = true;
for(int i=2; i<=m; i++){
if(m%i==0 && isPrimeNumber(i)){
if(i!=2 && i!=3 && i!=5){
b = false;
break;
} else {
m = m/i;
}
}
}
return b;
}
//判断一个数是否是质数(素数)
public static boolean isPrimeNumber(int num){
if(num == 2) return true;//2特殊处理
if(num < 2 || num % 2 == 0) {
return false;//识别小于2的数和偶数
}
for(int i=3; i<=Math.sqrt(num); i+=2){
if(num % i == 0){//识别被奇数整除
return false;
}
}
return true;
}
}