File tree Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Original file line number Diff line number Diff line change
1
+ // Time: O(sqrt(n))
2
+ // Space: O(1)
3
+
4
+ class Solution {
5
+ public:
6
+ int kthFactor (int n, int k) {
7
+ const auto & [mid, count] = kthFactor_ (n);
8
+ int total = 2 * count - (mid * mid == n);
9
+ if (k > total) {
10
+ return -1 ;
11
+ }
12
+ int result = kthFactor_ (n, (k <= count) ? k : total - (k - 1 )).first ;
13
+ return (k <= count) ? result : n / result;
14
+ }
15
+
16
+ private:
17
+ pair<int , int > kthFactor_ (int n, int k = 0 ) {
18
+ int mid = -1 ;
19
+ for (int i = 1 ; i * i <= n; ++i) {
20
+ if (n % i) {
21
+ continue ;
22
+ }
23
+ mid = i;
24
+ if (!--k) {
25
+ break ;
26
+ }
27
+ }
28
+ return {mid, -k};
29
+ }
30
+ };
31
+
32
+ // Time: O(sqrt(n))
33
+ // Space: O(sqrt(n))
34
+ class Solution2 {
35
+ public:
36
+ int kthFactor (int n, int k) {
37
+ vector<int > result;
38
+ for (int i = 1 ; i * i <= n; ++i) {
39
+ if (n % i) {
40
+ continue ;
41
+ }
42
+ if (i * i != n) {
43
+ result.emplace_back (i);
44
+ }
45
+ if (!--k) {
46
+ return i;
47
+ }
48
+ }
49
+ return (k > result.size ()) ? -1 : n / result[result.size () - k];
50
+ }
51
+ };
You can’t perform that action at this time.
0 commit comments