Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/1492.html
1492. The kth Factor of n (Medium)
Given two positive integers n
and k
.
A factor of an integer n
is defined as an integer i
where n % i == 0
.
Consider a list of all factors of n
sorted in ascending order, return the kth
factor in this list or return -1 if n
has less than k
factors.
Example 1:
Input: n = 12, k = 3 Output: 3 Explanation: Factors list is [1, 2, 3, 4, 6, 12], the 3rd factor is 3.
Example 2:
Input: n = 7, k = 2 Output: 7 Explanation: Factors list is [1, 7], the 2nd factor is 7.
Example 3:
Input: n = 4, k = 4 Output: -1 Explanation: Factors list is [1, 2, 4], there is only 3 factors. We should return -1.
Example 4:
Input: n = 1, k = 1 Output: 1 Explanation: Factors list is [1], the 1st factor is 1.
Example 5:
Input: n = 1000, k = 3 Output: 4 Explanation: Factors list is [1, 2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 125, 200, 250, 500, 1000].
Constraints:
1 <= k <= n <= 1000
Related Topics:
Math
Solution 1.
-
class Solution { public int kthFactor(int n, int k) { if (k == 1) return 1; int sqrt = (int) Math.sqrt(n); List<Integer> factors = new ArrayList<Integer>(); for (int i = 1; i <= sqrt; i++) { if (n % i == 0) factors.add(i); } int size = factors.size(); int factorsCount = sqrt * sqrt == n ? size * 2 - 1 : size * 2; if (k > factorsCount) return -1; else if (k <= size) return factors.get(k - 1); else { int index = factorsCount - k; return n / factors.get(index); } } } ############ class Solution { public int kthFactor(int n, int k) { int i = 1; for (; i < n / i; ++i) { if (n % i == 0 && (--k == 0)) { return i; } } if (i * i != n) { --i; } for (; i > 0; --i) { if (n % (n / i) == 0 && (--k == 0)) { return n / i; } } return -1; } }
-
// OJ: https://leetcode.com/problems/the-kth-factor-of-n/ // Time: O(sqrt(N)) // Space: O(1) class Solution { public: int kthFactor(int n, int k) { int i = 1; for (; i * i <= n; ++i) { if (n % i) continue; if (--k == 0) return i; } --i; if (i * i == n) --i; for (; i >= 1; --i) { if (n % i) continue; if (--k == 0) return n / i; } return -1; } };
-
class Solution: def kthFactor(self, n: int, k: int) -> int: i = 1 while i * i < n: if n % i == 0: k -= 1 if k == 0: return i i += 1 if i * i != n: i -= 1 while i: if (n % (n // i)) == 0: k -= 1 if k == 0: return n // i i -= 1 return -1
-
func kthFactor(n int, k int) int { i := 1 for ; i < n/i; i++ { if n%i == 0 { k-- if k == 0 { return i } } } if i*i != n { i-- } for ; i > 0; i-- { if n%(n/i) == 0 { k-- if k == 0 { return n / i } } } return -1 }