题目
给你一个整数 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 <= 10^4
来源:力扣(LeetCode)
解题思路
首先一个数肯定有超过两个除数就是1和它本身,我们可以设立一个标记当在2和n-1之间发现了一个除数,那么标记转换,如果再遇到除数则检查标记就能返回结果,另外如果没有遇到除数,说明此数是一个质数也可以返回结果了。
class Solution:def isThree(self, n: int) -> bool:if n==2:return Falseflag=Falsefor i in range(2,n):if n%i==0:if flag:return Falseflag=Truereturn flag
其实拥有三个除数的数,一个是1另一个是其本身,还有一个必定是相等的一对除数。但是找这一对数必须从2开始找起,这样才不是有偏的。
class Solution:def isThree(self, n: int) -> bool:for i in range(2,int(n**0.5)+1):if n%i==0:return i**2==nreturn False