Skip to content

Commit daf06dd

Browse files
committed
feat: add solutions to lc problem: No.1952
No.1952.Three Divisors
1 parent 561c6a7 commit daf06dd

File tree

7 files changed

+188
-15
lines changed

7 files changed

+188
-15
lines changed

solution/1900-1999/1952.Three Divisors/README.md

+87-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,18 @@
3737

3838
<!-- 这里可写通用的实现逻辑 -->
3939

40+
**方法一:枚举**
41+
42+
一个数 $n$ 一定有 $1$ 和 $n$ 两个正除数,因此只需要枚举 $2$ 到 $n-1$ 之间的数,看它们是否是 $n$ 的正除数即可,是则累加计数器,最后判断计数器是否为 $1$ 即可。
43+
44+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为给定的整数。
45+
46+
**方法二:枚举优化**
47+
48+
我们可以枚举 $1$ 到 $\sqrt{n}$ 之间的数 $i$,如果 $n$ 能被 $i$ 整除,并且 $\frac{n}{i}$ 不等于 $i$,那么计数器累加 $2$,否则计数器累加 $1$。最后判断计数器是否为 $3$ 即可。
49+
50+
时间复杂度 $O(\sqrt{n})$,空间复杂度 $O(1)$。其中 $n$ 为给定的整数。
51+
4052
<!-- tabs:start -->
4153

4254
### **Python3**
@@ -49,6 +61,18 @@ class Solution:
4961
return sum(n % i == 0 for i in range(2, n)) == 1
5062
```
5163

64+
```python
65+
class Solution:
66+
def isThree(self, n: int) -> bool:
67+
cnt = 0
68+
i = 1
69+
while i <= n // i:
70+
if n % i == 0:
71+
cnt += 1 if i == n // i else 2
72+
i += 1
73+
return cnt == 3
74+
```
75+
5276
### **Java**
5377

5478
<!-- 这里可写当前语言的特殊实现逻辑 -->
@@ -67,20 +91,50 @@ class Solution {
6791
}
6892
```
6993

94+
```java
95+
class Solution {
96+
public boolean isThree(int n) {
97+
int cnt = 0;
98+
for (int i = 1; i <= n / i; ++i) {
99+
if (n % i == 0) {
100+
cnt += n / i == i ? 1 : 2;
101+
}
102+
}
103+
return cnt == 3;
104+
}
105+
}
106+
```
107+
70108
### **C++**
71109

72110
```cpp
73111
class Solution {
74112
public:
75113
bool isThree(int n) {
76114
int cnt = 0;
77-
for (int i = 2; i < n; ++i)
115+
for (int i = 2; i < n; ++i) {
78116
cnt += n % i == 0;
117+
}
79118
return cnt == 1;
80119
}
81120
};
82121
```
83122
123+
```cpp
124+
class Solution {
125+
public:
126+
bool isThree(int n) {
127+
int cnt = 0;
128+
for (int i = 1; i <= n / i; ++i) {
129+
if (n % i == 0) {
130+
cnt += n / i == i ? 1 : 2;
131+
}
132+
}
133+
return cnt == 3;
134+
}
135+
};
136+
```
137+
84138
### **Go**
85139

86140
```go
@@ -95,6 +149,22 @@ func isThree(n int) bool {
95149
}
96150
```
97151

152+
```go
153+
func isThree(n int) bool {
154+
cnt := 0
155+
for i := 1; i <= n/i; i++ {
156+
if n%i == 0 {
157+
if n/i == i {
158+
cnt++
159+
} else {
160+
cnt += 2
161+
}
162+
}
163+
}
164+
return cnt == 3
165+
}
166+
```
167+
98168
### **JavaScript**
99169

100170
```js
@@ -113,6 +183,22 @@ var isThree = function (n) {
113183
};
114184
```
115185

186+
```js
187+
/**
188+
* @param {number} n
189+
* @return {boolean}
190+
*/
191+
var isThree = function (n) {
192+
let cnt = 0;
193+
for (let i = 1; i <= n / i; ++i) {
194+
if (n % i == 0) {
195+
cnt += ~~(n / i) == i ? 1 : 2;
196+
}
197+
}
198+
return cnt == 3;
199+
};
200+
```
201+
116202
### **...**
117203

118204
```

solution/1900-1999/1952.Three Divisors/README_EN.md

+75-1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,18 @@ class Solution:
4444
return sum(n % i == 0 for i in range(2, n)) == 1
4545
```
4646

47+
```python
48+
class Solution:
49+
def isThree(self, n: int) -> bool:
50+
cnt = 0
51+
i = 1
52+
while i <= n // i:
53+
if n % i == 0:
54+
cnt += 1 if i == n // i else 2
55+
i += 1
56+
return cnt == 3
57+
```
58+
4759
### **Java**
4860

4961
```java
@@ -60,20 +72,50 @@ class Solution {
6072
}
6173
```
6274

75+
```java
76+
class Solution {
77+
public boolean isThree(int n) {
78+
int cnt = 0;
79+
for (int i = 1; i <= n / i; ++i) {
80+
if (n % i == 0) {
81+
cnt += n / i == i ? 1 : 2;
82+
}
83+
}
84+
return cnt == 3;
85+
}
86+
}
87+
```
88+
6389
### **C++**
6490

6591
```cpp
6692
class Solution {
6793
public:
6894
bool isThree(int n) {
6995
int cnt = 0;
70-
for (int i = 2; i < n; ++i)
96+
for (int i = 2; i < n; ++i) {
7197
cnt += n % i == 0;
98+
}
7299
return cnt == 1;
73100
}
74101
};
75102
```
76103
104+
```cpp
105+
class Solution {
106+
public:
107+
bool isThree(int n) {
108+
int cnt = 0;
109+
for (int i = 1; i <= n / i; ++i) {
110+
if (n % i == 0) {
111+
cnt += n / i == i ? 1 : 2;
112+
}
113+
}
114+
return cnt == 3;
115+
}
116+
};
117+
```
118+
77119
### **Go**
78120

79121
```go
@@ -88,6 +130,22 @@ func isThree(n int) bool {
88130
}
89131
```
90132

133+
```go
134+
func isThree(n int) bool {
135+
cnt := 0
136+
for i := 1; i <= n/i; i++ {
137+
if n%i == 0 {
138+
if n/i == i {
139+
cnt++
140+
} else {
141+
cnt += 2
142+
}
143+
}
144+
}
145+
return cnt == 3
146+
}
147+
```
148+
91149
### **JavaScript**
92150

93151
```js
@@ -106,6 +164,22 @@ var isThree = function (n) {
106164
};
107165
```
108166

167+
```js
168+
/**
169+
* @param {number} n
170+
* @return {boolean}
171+
*/
172+
var isThree = function (n) {
173+
let cnt = 0;
174+
for (let i = 1; i <= n / i; ++i) {
175+
if (n % i == 0) {
176+
cnt += ~~(n / i) == i ? 1 : 2;
177+
}
178+
}
179+
return cnt == 3;
180+
};
181+
```
182+
109183
### **...**
110184

111185
```

solution/1900-1999/1952.Three Divisors/Solution.cpp

+6-3
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ class Solution {
22
public:
33
bool isThree(int n) {
44
int cnt = 0;
5-
for (int i = 2; i < n; ++i)
6-
cnt += n % i == 0;
7-
return cnt == 1;
5+
for (int i = 1; i <= n / i; ++i) {
6+
if (n % i == 0) {
7+
cnt += n / i == i ? 1 : 2;
8+
}
9+
}
10+
return cnt == 3;
811
}
912
};
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
func isThree(n int) bool {
22
cnt := 0
3-
for i := 2; i < n; i++ {
3+
for i := 1; i <= n/i; i++ {
44
if n%i == 0 {
5-
cnt++
5+
if n/i == i {
6+
cnt++
7+
} else {
8+
cnt += 2
9+
}
610
}
711
}
8-
return cnt == 1
12+
return cnt == 3
913
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
class Solution {
22
public boolean isThree(int n) {
33
int cnt = 0;
4-
for (int i = 2; i < n; i++) {
4+
for (int i = 1; i <= n / i; ++i) {
55
if (n % i == 0) {
6-
++cnt;
6+
cnt += n / i == i ? 1 : 2;
77
}
88
}
9-
return cnt == 1;
9+
return cnt == 3;
1010
}
1111
}

solution/1900-1999/1952.Three Divisors/Solution.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
*/
55
var isThree = function (n) {
66
let cnt = 0;
7-
for (let i = 2; i < n; ++i) {
7+
for (let i = 1; i <= n / i; ++i) {
88
if (n % i == 0) {
9-
++cnt;
9+
cnt += ~~(n / i) == i ? 1 : 2;
1010
}
1111
}
12-
return cnt == 1;
12+
return cnt == 3;
1313
};
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
11
class Solution:
22
def isThree(self, n: int) -> bool:
3-
return sum(n % i == 0 for i in range(2, n)) == 1
3+
cnt = 0
4+
i = 1
5+
while i <= n // i:
6+
if n % i == 0:
7+
cnt += 1 if i == n // i else 2
8+
i += 1
9+
return cnt == 3

0 commit comments

Comments
 (0)