Skip to content

Commit 9e9d7e7

Browse files
committed
feat: add solutions to lc problem: No.1492
No.1492.The kth Factor of n
1 parent 78b6cba commit 9e9d7e7

File tree

6 files changed

+346
-0
lines changed

6 files changed

+346
-0
lines changed

solution/1400-1499/1492.The kth Factor of n/README.md

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,22 +56,162 @@
5656

5757
<!-- 这里可写通用的实现逻辑 -->
5858

59+
**方法一:暴力枚举**
60+
61+
“因子”是指能整除某个数的数。因此,我们只需要从小到大枚举 $[1,2,..n]$,找到所有能整除 $n$ 的数,然后返回第 $k$ 个即可。
62+
63+
时间复杂度 $O(n)$。
64+
65+
**方法二:枚举优化**
66+
67+
我们可以发现,如果 $n$ 有一个因子 $x$,那么 $n$ 一定也有一个因子 $n/x$。
68+
69+
因此,我们先需要枚举 $[1,2,...\left \lfloor \sqrt{n} \right \rfloor ]$,找到所有能整除 $n$ 的数,如果找到第 $k$ 个因子,那么直接返回即可。如果没有找到第 $k$ 个因子,那么我们再倒序枚举 $[\left \lfloor \sqrt{n} \right \rfloor ,..1]$,找到第 $k$ 个因子即可。
70+
71+
时间复杂度 $O(\sqrt{n})$。
72+
5973
<!-- tabs:start -->
6074

6175
### **Python3**
6276

6377
<!-- 这里可写当前语言的特殊实现逻辑 -->
6478

6579
```python
80+
class Solution:
81+
def kthFactor(self, n: int, k: int) -> int:
82+
for i in range(1, n + 1):
83+
if n % i == 0:
84+
k -= 1
85+
if k == 0:
86+
return i
87+
return -1
88+
```
6689

90+
```python
91+
class Solution:
92+
def kthFactor(self, n: int, k: int) -> int:
93+
i = 1
94+
while i * i < n:
95+
if n % i == 0:
96+
k -= 1
97+
if k == 0:
98+
return i
99+
i += 1
100+
if i * i != n:
101+
i -= 1
102+
while i:
103+
if (n % (n // i)) == 0:
104+
k -= 1
105+
if k == 0:
106+
return n // i
107+
i -= 1
108+
return -1
67109
```
68110

69111
### **Java**
70112

71113
<!-- 这里可写当前语言的特殊实现逻辑 -->
72114

73115
```java
116+
class Solution {
117+
public int kthFactor(int n, int k) {
118+
for (int i = 1; i <= n; ++i) {
119+
if (n % i == 0 && (--k == 0)) {
120+
return i;
121+
}
122+
}
123+
return -1;
124+
}
125+
}
126+
```
127+
128+
```java
129+
class Solution {
130+
public int kthFactor(int n, int k) {
131+
int i = 1;
132+
for (; i < n / i; ++i) {
133+
if (n % i == 0 && (--k == 0)) {
134+
return i;
135+
}
136+
}
137+
if (i * i != n) {
138+
--i;
139+
}
140+
for (; i > 0; --i) {
141+
if (n % (n / i) == 0 && (--k == 0)) {
142+
return n / i;
143+
}
144+
}
145+
return -1;
146+
}
147+
}
148+
```
149+
150+
### **C++**
151+
152+
```cpp
153+
class Solution {
154+
public:
155+
int kthFactor(int n, int k) {
156+
int i = 1;
157+
for (; i < n / i; ++i) {
158+
if (n % i == 0 && (--k == 0)) {
159+
return i;
160+
}
161+
}
162+
if (i * i != n) {
163+
--i;
164+
}
165+
for (; i > 0; --i) {
166+
if (n % (n / i) == 0 && (--k == 0)) {
167+
return n / i;
168+
}
169+
}
170+
return -1;
171+
}
172+
};
173+
```
174+
175+
### **Go**
176+
177+
```go
178+
func kthFactor(n int, k int) int {
179+
for i := 1; i <= n; i++ {
180+
if n%i == 0 {
181+
k--
182+
if k == 0 {
183+
return i
184+
}
185+
}
186+
}
187+
return -1
188+
}
189+
```
74190

191+
```go
192+
func kthFactor(n int, k int) int {
193+
i := 1
194+
for ; i < n/i; i++ {
195+
if n%i == 0 {
196+
k--
197+
if k == 0 {
198+
return i
199+
}
200+
}
201+
}
202+
if i*i != n {
203+
i--
204+
}
205+
for ; i > 0; i-- {
206+
if n%(n/i) == 0 {
207+
k--
208+
if k == 0 {
209+
return n / i
210+
}
211+
}
212+
}
213+
return -1
214+
}
75215
```
76216

77217
### **...**

solution/1400-1499/1492.The kth Factor of n/README_EN.md

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,139 @@
5252
### **Python3**
5353

5454
```python
55+
class Solution:
56+
def kthFactor(self, n: int, k: int) -> int:
57+
for i in range(1, n + 1):
58+
if n % i == 0:
59+
k -= 1
60+
if k == 0:
61+
return i
62+
return -1
63+
```
5564

65+
```python
66+
class Solution:
67+
def kthFactor(self, n: int, k: int) -> int:
68+
i = 1
69+
while i * i < n:
70+
if n % i == 0:
71+
k -= 1
72+
if k == 0:
73+
return i
74+
i += 1
75+
if i * i != n:
76+
i -= 1
77+
while i:
78+
if (n % (n // i)) == 0:
79+
k -= 1
80+
if k == 0:
81+
return n // i
82+
i -= 1
83+
return -1
5684
```
5785

5886
### **Java**
5987

6088
```java
89+
class Solution {
90+
public int kthFactor(int n, int k) {
91+
for (int i = 1; i <= n; ++i) {
92+
if (n % i == 0 && (--k == 0)) {
93+
return i;
94+
}
95+
}
96+
return -1;
97+
}
98+
}
99+
```
100+
101+
```java
102+
class Solution {
103+
public int kthFactor(int n, int k) {
104+
int i = 1;
105+
for (; i < n / i; ++i) {
106+
if (n % i == 0 && (--k == 0)) {
107+
return i;
108+
}
109+
}
110+
if (i * i != n) {
111+
--i;
112+
}
113+
for (; i > 0; --i) {
114+
if (n % (n / i) == 0 && (--k == 0)) {
115+
return n / i;
116+
}
117+
}
118+
return -1;
119+
}
120+
}
121+
```
122+
123+
### **C++**
124+
125+
```cpp
126+
class Solution {
127+
public:
128+
int kthFactor(int n, int k) {
129+
int i = 1;
130+
for (; i < n / i; ++i) {
131+
if (n % i == 0 && (--k == 0)) {
132+
return i;
133+
}
134+
}
135+
if (i * i != n) {
136+
--i;
137+
}
138+
for (; i > 0; --i) {
139+
if (n % (n / i) == 0 && (--k == 0)) {
140+
return n / i;
141+
}
142+
}
143+
return -1;
144+
}
145+
};
146+
```
147+
148+
### **Go**
149+
150+
```go
151+
func kthFactor(n int, k int) int {
152+
for i := 1; i <= n; i++ {
153+
if n%i == 0 {
154+
k--
155+
if k == 0 {
156+
return i
157+
}
158+
}
159+
}
160+
return -1
161+
}
162+
```
61163

164+
```go
165+
func kthFactor(n int, k int) int {
166+
i := 1
167+
for ; i < n/i; i++ {
168+
if n%i == 0 {
169+
k--
170+
if k == 0 {
171+
return i
172+
}
173+
}
174+
}
175+
if i*i != n {
176+
i--
177+
}
178+
for ; i > 0; i-- {
179+
if n%(n/i) == 0 {
180+
k--
181+
if k == 0 {
182+
return n / i
183+
}
184+
}
185+
}
186+
return -1
187+
}
62188
```
63189

64190
### **...**
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public:
3+
int kthFactor(int n, int k) {
4+
int i = 1;
5+
for (; i < n / i; ++i) {
6+
if (n % i == 0 && (--k == 0)) {
7+
return i;
8+
}
9+
}
10+
if (i * i != n) {
11+
--i;
12+
}
13+
for (; i > 0; --i) {
14+
if (n % (n / i) == 0 && (--k == 0)) {
15+
return n / i;
16+
}
17+
}
18+
return -1;
19+
}
20+
};
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
func kthFactor(n int, k int) int {
2+
i := 1
3+
for ; i < n/i; i++ {
4+
if n%i == 0 {
5+
k--
6+
if k == 0 {
7+
return i
8+
}
9+
}
10+
}
11+
if i*i != n {
12+
i--
13+
}
14+
for ; i > 0; i-- {
15+
if n%(n/i) == 0 {
16+
k--
17+
if k == 0 {
18+
return n / i
19+
}
20+
}
21+
}
22+
return -1
23+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public int kthFactor(int n, int k) {
3+
int i = 1;
4+
for (; i < n / i; ++i) {
5+
if (n % i == 0 && (--k == 0)) {
6+
return i;
7+
}
8+
}
9+
if (i * i != n) {
10+
--i;
11+
}
12+
for (; i > 0; --i) {
13+
if (n % (n / i) == 0 && (--k == 0)) {
14+
return n / i;
15+
}
16+
}
17+
return -1;
18+
}
19+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution:
2+
def kthFactor(self, n: int, k: int) -> int:
3+
i = 1
4+
while i * i < n:
5+
if n % i == 0:
6+
k -= 1
7+
if k == 0:
8+
return i
9+
i += 1
10+
if i * i != n:
11+
i -= 1
12+
while i:
13+
if (n % (n // i)) == 0:
14+
k -= 1
15+
if k == 0:
16+
return n // i
17+
i -= 1
18+
return -1

0 commit comments

Comments
 (0)