【发布时间】:2010-09-15 08:46:49
【问题描述】:
这是非常愚蠢的方式:
def divisorGenerator(n):
for i in xrange(1,n/2+1):
if n%i == 0: yield i
yield n
我想要得到的结果与这个相似,但我想要一个更智能的算法(这个太慢太笨了:-)
我可以足够快地找到主要因素及其多重性。 我有一个以这种方式生成因子的生成器:
(因子 1,多重性 1)
(因子 2,多重性 2)
(因子 3,多重性 3)
等等……
即
的输出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: 不要再说这是 this 帖子的副本。计算给定数的除数不需要计算所有除数。这是一个不同的问题,如果您认为不是,请在维基百科上查找“除数函数”。在发布之前阅读问题和答案,如果您不明白主题是什么,请不要添加无用且已经给出的答案。
【问题讨论】:
-
之所以建议这个问题几乎是“计算给定数的除数的算法”的重复,是因为该问题中建议的第一步是 找到所有除数,我相信这正是你想要做的?
-
Andrew 为了找到有多少除数,您只需找到主要因素,然后使用它们来计算可能有多少除数。在这种情况下不需要寻找除数。
-
@Andrea Ambu,请更正你的函数名称
-
嘿,你在 12 年后阅读这篇文章,你想要的是
sympy.divisors