1952. 三除数
题目描述
给你一个整数 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 <= 104
解法
方法一:枚举
一个数 \(n\) 一定有 \(1\) 和 \(n\) 两个正除数,因此只需要枚举 \(2\) 到 \(n-1\) 之间的数,看它们是否是 \(n\) 的正除数即可,是则累加计数器,最后判断计数器是否为 \(1\) 即可。
时间复杂度 \(O(n)\),空间复杂度 \(O(1)\)。其中 \(n\) 为给定的整数。
1 2 3 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
方法二:枚举优化
我们可以枚举 \(1\) 到 \(\sqrt{n}\) 之间的数 \(i\),如果 \(n\) 能被 \(i\) 整除,并且 \(\frac{n}{i}\) 不等于 \(i\),那么计数器累加 \(2\),否则计数器累加 \(1\)。最后判断计数器是否为 \(3\) 即可。
时间复杂度 \(O(\sqrt{n})\),空间复杂度 \(O(1)\)。其中 \(n\) 为给定的整数。
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|