目录
- 一、概念
- 二、模板
- 三、例题
- 题:507. 完美数
- 解:
- 题:263. 丑数
- 解:
详情请看英雄哥的专栏内容,以下为Java版
一、概念
对于每个整数 n,都可以唯一分解成素数的乘积
【算术基本定理:任何一个大于 1 的自然数可以分解成一些素数的乘积;并且在不计次序的情况下,这种分解方式是唯一的。】
二、模板
三、例题
题:507. 完美数
对于一个 正整数
,如果它和除了它自身以外的所有 正因子
之和相等,我们称它为 「完美数」
。
给定一个 整数n
, 如果是完美数,返回 true;否则返回 false。
示例 1:
输入:num = 28
输出:true
解释:28 = 1 + 2 + 4 + 7 + 14
1, 2, 4, 7, 和 14 是 28 的所有正因子。
示例 2:
输入:num = 7
输出:true
提示:
1 <= num <= 108
解:
解题思路:模拟
AC代码:
class Solution {
public boolean checkPerfectNumber(int num) {
if(num == 1) return false; // num == 1特例
int sum = 1;
for(int i = 2; i *i <= num; i ++) {
if(num % i == 0) {
sum += i;
if(i * i < num) {
sum += num / i;
}
}
}
return sum == num;
}
}
题:263. 丑数
给你一个整数 n ,请你判断 n 是否为 丑数
。如果是,返回 true ;否则,返回 false 。
丑数 就是只包含质因数 2
、3
和/或5
的正整数。
示例 1:
输入:n = 6
输出:true
解释:6 = 2 × 3
示例 2:
输入:n = 8
输出:true
解释:8 = 2 × 2 × 2
示例 3:
输入:n = 14
输出:false
解释:14 不是丑数,因为它包含了另外一个质因数 7 。
示例 4:
输入:n = 1
输出:true
解释:1 通常被视为丑数。
提示:
-231 <= n <= 231 - 1
解:
解题思路:
- 题目输入n还有负值和0,所以先将这些特判
- 分析得:
我们只需对n整除2,3,5,看n最终是否为1
AC代码:
class Solution {
public boolean isUgly(int n) {
if(n <= 0) return false;
while(n % 2 == 0) n /= 2;
while(n % 3 == 0) n /= 3;
while(n % 5 == 0) n /= 5;
return n == 1;
}
}