这是非常愚蠢的方式:
def divisorGenerator(n):
for i in xrange(1,n/2+1):
if n%i == 0: yield i
yield n
我想得到的结果与这个相似,但我想要一个更智能的算法(这个太慢太笨了:-)
我可以足够快地找到主要因素及其多样性。我有一个以这种方式生成因子的生成器:
(factor1, multiplicity1) (factor2,
multiplicity2)
(factor3, multiplicity3)
等等...
即输出
for i in factorGenerator(100):
print i
是:
(2, 2)
(5, 2)
我不知道这对我想做的事情有多大用处(我为其他问题编写了代码),无论如何我想要一种更聪明的方法
for i in divisorGen(100):
print i
输出这个:
1
2
4
5
10
20
25
50
100
更新:非常感谢 Greg Hewgill 和他的“聪明的方式” :) 计算 100000000 的所有除数用他的方式花费了 0.01 秒,而愚蠢的方式在我的机器上采用了 39 秒,非常酷:D
更新2:不要说这是这篇文章的副本。计算给定数的除数不需要计算所有除数。这是一个不同的问题,如果您认为不是,请在维基百科上查找“除数函数”。在发布之前阅读问题和答案,如果您不了解主题是什么,请不要添加无用且已经给出的答案。