一、问题描述
Write a program to check whether a given number is an ugly number.
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5
. For example, 6, 8
are ugly while 14
is not ugly since it includes another prime factor 7
.
Note that 1
is typically treated as an ugly number.
二、问题分析
采用因式分解。
三、算法代码
public class Solution {
public boolean isUgly(int num) {
//采用因式分解的方法
if(num <= 0){
return false;
}
HashSet<Integer> factors = new HashSet<Integer>();
if(num == 1){
return true;
}
boolean flag = false;
while(num != 1){
if(num % 2 == 0){
factors.add(2);
num /= 2;
flag = true;
}
if(num % 3 == 0){
factors.add(3);
num /= 3;
flag = true;
}
if(num % 5 == 0){
factors.add(5);
num /= 5;
flag = true;
}
if(num % 7 == 0){
factors.add(7);
num /= 7;
flag = true;
}
if(!flag){
return false; //如果某一趟中不能被2,3,5,7整除,则该数肯定不是丑数
}
flag = false;//把flag置为false开始下一趟因式分解
}
if(factors.contains(7)){
return false;
}else{
return true;
}
}
}