class Solution {
public boolean isThree(int n) {
int count=0;
for(int i=1;i*i<=n;i++){
if(n%i==0){
if(n/i!=i){
count+=2;
}
else{
count++;
}
}
}
return count==3;
}
}
class Solution(object):
def isThree(self, n):
count=0
i=1
while i*i<=n:
if n%i==0:
if n/i!=i:
count+=2
else:
count+=1
i+=1
return count==3
代码思路
初始化计数器:定义一个变量 count
,用于记录 n
的除数个数。初始值为 0。
遍历可能的除数:使用一个 for
循环从 1
遍历到 sqrt(n)
(即 i * i <= n
)。这是因为如果 n
有一个除数 i
,那么 n / i
也一定是 n
的除数。因此,只需要遍历到 sqrt(n)
就可以找到所有的除数。
判断是否为除数:在循环中,检查 n % i == 0
,即 i
是否是 n
的除数。
如果 i
是 n
的除数,进一步检查 n / i
是否等于 i
:如果 n / i != i
,说明 i
和 n / i
是两个不同的除数,因此 count
增加 2。如果 n / i == i
,说明 i
是 n
的一个平方根,因此 count
只增加 1。
返回结果:最后,检查 count
是否等于 3。如果等于 3,说明 n
恰好有三个除数,返回 true
;否则返回 false
。
时间复杂度:该算法的时间复杂度是 O(sqrt(n))
,因为只需要遍历到 sqrt(n)
。