函数应该返回因子列表(而不是打印)。因为你要计算从1到1的所有潜在因子
a
,需要很长时间才能产生一个非常大的结果,比如600851475143。
为了加快运算速度,您可以成对提取因子,这样您只需查看整数平方根以下的除数。每次你找到数字(N)的一个因子(f),你就知道有一个对应的因子,它是N除以f(N/f)的结果。这意味着每个因素<=N有一个对应的>=N所以你可以让它们成对出现,只检查除数<=N
def factors(N):
return [f for d in range(1,int(N**0.5)+1) if N%d==0 for f in {d,N//d}]
输出:
print(factor(600851475143))
[1, 600851475143, 8462696833, 71, 716151937, 839, 408464633, 1471,
6857, 87625999, 59569, 10086647, 104441, 5753023, 1234169, 486847]