Problem
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
.
Example 1:
Input: 6 Output: true Explanation: 6 = 2 × 3
Example 2:
Input: 8 Output: true Explanation: 8 = 2 × 2 × 2
Example 3:
Input: 14 Output: false Explanation:14
is not ugly since it includes another prime factor7
.
Note:
1
is typically treated as an ugly number.- Input is within the 32-bit signed integer range: [−231, 231 − 1].
Code
class Solution {
public:
long logN(long a, long b) {
return log(b * 1.0) / log(a * 1.0);
}
long yu(long n, long m) {
int num = logN(m, n);
while (num) {
int a = pow(m, num);
while (n % a == 0) {
n /= a;
}
num /= 2;
}
return n;
}
bool isUgly(int n) {
long num = n;
if (num < 0) {
return 0;
}
num = yu(num, 2);
if (num == 1) {
return true;
}
num = yu(num, 3);
if (num == 1) {
return true;
}
return yu(num, 5) == 1;
}
};