题目描述
丑数 就是只包含质因数 2
、3
和 5
的正整数。
给你一个整数 n
,请你判断 n
是否为 丑数 。如果是,返回 true
;否则,返回 false
。
方法一
bool isUgly(int n) {
if(n<=0)
return false;
int factors[]={2,3,5};
for(int i=0;i<3;i++){
while(n%factors[i]==0){
n/=factors[i];
}
}
return n==1;
}
分析
这是官方给的题解,果然让我眼前一亮,也算是长见识了。把质因数2,3,5构成一个数组,让数n依次去求余,一旦余数等于0(能整除了)就让数n等于对其整除的结果。一直除完,最后数如果等于1就说明已经彻底除完了。
方法二
bool isUgly(int n) {
if(n<1) return false;
while(n%2==0||n%3==0||n%5==0){
if(n%2==0){
n/=2;
}
if(n%3==0){
n/=3;
}
if(n%5==0){
n/=5;
}
}
if(n==1) return true;
return false;
}
分析
这是用时最短的答案,比较常规可以想到。因为要满足数n的因数只有2,3,5.所以n%2==0和n%3==0和n%5==0三者应该是或(||)的关系(第一次想理解为&&了,出错了)。一旦满足整除了,就要继续除,直到n不能被他们三个整除,就退出循环。