我制作了一个函数,该函数可以找到所有运行得很快的除数,但是对于我要执行的操作,我希望它运行得更快。我还已经创建了primeFactors函数。我正在做的是找到所有可能产生的力量,并将它们相乘。
from functools import reduce
from itertools import product
def divisors(n):
x = sorted(primeFactors(n))
r = []
for values in set(x):
t = list(range(0, x.count(values) + 1))
r.append(t)
comb = list(product(*r))
divisors = []
for sets in comb:
n = [a**b for a, b in zip(set(x), sets)]
divisors.append(reduce(lambda x, y: x*y, n))
return sorted(divisors)
是否有另一种更快的方法,或者可以对此代码进行任何改进以使其更快?为了解决这个问题,让我们假设我的primeFactors是世界上最快的。
我制作了一个函数,该函数可以找到所有运行得很快的除数,但是对于我要执行的操作,我希望它运行得更快。我还已经创建了primeFactors函数。我在做什么是...
有很多方法可以使您的功能获得较小的效率提高:
[几乎是@ kaya3解决方案的三倍,大约是您原始解决方案的13倍(在kaya3的示例号3333960000上:]