1492. n 的第 k 个因子
大约 2 分钟
---
1492. n 的第 k 个因子
- 标签:数学、数论
- 难度:中等
题目链接
题目大意
描述:给定两个整数 和 。
要求:按递增顺序返回 的第 个因子。如果因子不足 个,返回 。
说明:
- 。
- 。
示例:
- 示例 1:
输入:n = 12, k = 3
输出:3
解释:因子列表包括 [1, 2, 3, 4, 6, 12],第 3 个因子是 3 。- 示例 2:
输入:n = 7, k = 2
输出:7
解释:因子列表包括 [1, 7] ,第 2 个因子是 7 。解题思路
思路 1:枚举
1. 核心思想
,可以直接遍历 ,检查每个数是否是 的因子,计数到 时返回。
2. 具体步骤
第 1 步:遍历 :
- 如果 ,计数 。
- 如果 ,返回 。
第 2 步:如果遍历结束仍未找到,返回 。
3. 举例说明
以 为例:
的因子:
第 个:,第 个:,第 个:。
返回 。
思路 1:代码
class Solution:
def kthFactor(self, n: int, k: int) -> int:
count = 0
for i in range(1, n + 1):
if n % i == 0:
count += 1
if count == k:
return i
return -1思路 1:复杂度分析
- 时间复杂度:。
- 空间复杂度:。
思路 2:优化(枚举到 )
因子成对出现,可以枚举到 ,收集所有因子排序后取第 个。
class Solution:
def kthFactor(self, n: int, k: int) -> int:
factors = []
for i in range(1, int(n ** 0.5) + 1):
if n % i == 0:
factors.append(i)
if i != n // i:
factors.append(n // i)
factors.sort()
return factors[k - 1] if k <= len(factors) else -1时间,在 或更大时更高效。