开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第25天,点击查看活动详情
题目 leetcode.cn/
- 给你一个整数
n。如果n恰好有三个正除数 ,返回true**;否则,返回 **false。 - 如果存在整数
k,满足n = k * m,那么整数m就是n的一个 除数 。
示例
-
示例 1:
- 输入: n = 2
- 输出: false
- 解释: 2 只有两个除数:1 和 2 。
-
示例 2:
- 输入: n = 4
- 输出: true
- 解释: 4 有三个除数:1、2 和 4 。
提示:
1 <= n <= 100000
代码
function isThree(n: number): boolean {
if(n < 4) return false;
let count = 2;
for(let i = 2; i < n; i++){
if(n % i === 0 && (n / i) !== i){
return false;
}
if(n % i === 0 && (n / i) === i){
count++;
}
}
return count === 3 ? true : false;
};
- 这种返回
true还是返回false的题目。可以首先分析下什么情况返回true,什么情况下返回false,然后再根据实际要求选择排除true的情况还是排除false的情况。 - 此题中返回
true的情况只有一种,那就是恰好有三个正除数。如果按照排除true的方式,可以遍历统计所有的正除数,如果所有的正除数不等于三个,那么返回false,否则返回true - 返回
false的情况一共有两种,一种是正除数的数量小于3个,另一种返回false的情况就是正除数数量大于3个 - 具体分析下:
- 当数字小于
4的时候,只有1、2、3,这三个数字的正除数只有1和它本身 - 当数字大于等于
4的时候,默认所有数字初始的正除数都包括1和它本身,那么只要在找到另一个正除数,并且这个正除数的商要和当前的正除数相等,因为如果不相等,那么就会出现两个正除数,加上本身两个,总数是大于3的,所以正除数和商不相等的情况下直接返回false - 所有数字中还包括质数,正除数只有
1和本身,当遍历完所有数之后没有发现正除数和商相等时,那么说明它是质数,直接返回false,其他情况就只有返回true
- 当数字小于