题目描述
只包含因子2,3,5的正整数被称作丑数,比如4,10,12都是丑数,而7,23,111则不是丑数,另外1也不是丑数。请编写一个函数,输入一个整数n,能够判断该整数是否为丑数,如果是,则输出True,否则输出False。
输入描述
每行输入一个正整数 n
1 <= n<= 1000000
输出描述
对于每一行输入,输出其是否为丑数,是则输出True,否则输出False
样例输入
4
7
12
样例输出
True
False
True
- 此算法实质上是使用代码逻辑还原了质因数分解的全过程。当给定数字num取余2、3、5与0相等,那么表示num的因子一定包含2、3、5。
- 使用num除以2、3、5则可以表示为分解出一个因子,以此类推,当num==1时,表示给定数字的因子只包含2、3、5,根据定义即可得知这个数为丑数。
#include <iostream>
using namespace std;
bool isUgly(int num) {
/*当num包含因数2时,取余结果必定为0;num/2相当于分解出一个因数:2。
以此类推,当num==1时,表示给定数字的因子只包含2、3、5,根据定义即可得知这个数为丑数*/
while (num % 2 == 0)
num /= 2;
while (num % 3 == 0)
num /= 3;
while (num % 5 == 0)
num /= 5;
return num == 1 ? true : false;
}
int main() {
int num;
/*如果需要输入时不受回车影响,可以使用数组保存用户输入的数字*/
while (true) {
cin >> num;
if (!num) {
break;
}
cout << (isUgly(num) ? "True" : "False") << "\n";
}
system("pause");
return 0;
}