1952. 三除数

92 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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