使用 Python 查找 n 的第 k 个因子的程序
假设我们有两个正值n和k。现在考虑我们有一个按升序排列的n的所有因子的列表,我们必须在这个列表中找到第k个因子。如果少于k个因子,则返回-1。
所以,如果输入像n=28k=4,那么输出将是7,因为28的因数是[1,2,4,7,14,28],第四个是7。
为了解决这个问题,我们将按照以下步骤操作-
如果k等于1,则
返回1
cand:=一个包含一个元素的列表[1]
对于范围2到1+floor中的iof(squarerootofn),请执行
在cand的末尾插入i
如果nmodi等于0,则
m:=糖果的大小
如果k>2*m或(k与2*m相同且n=(cand的最后一个元素)^2)
返回-1
如果k<=m,则
返回can[k-1]
因子:=can[2*m-k]
n/因子的返回商
让我们看看以下实现以获得更好的理解-
示例
from math import floor def solve(n ,k): if k == 1: return 1 cand = [1] for i in range(2, 1+floor(pow(n, 0.5))): if n%i == 0: cand.append(i) m = len(cand) if k > 2*m or (k == 2*m and n == cand[-1]**2): return -1 if k <= m: return cand[k-1] factor = cand[2*m - k] return n//factor n = 28 k = 4 print(solve(n ,k))
输入
28, 4输出结果
7