这是非常愚蠢的方式:
def divisorGenerator(n):
for i in xrange(1,n/2+1):
if n%i == 0: yield i
yield n
Run Code Online (Sandbox Code Playgroud)
我想得到的结果类似于这个,但我想要一个更聪明的算法(这个太慢和愚蠢了:-)
我可以足够快地找到素数因子及其多样性.我有一个以这种方式生成因子的生成器:
(factor1,multiplicity1)(factor2,multiplicity2)
(
factor3,multiplicity3)
等......
即输出
for i in factorGenerator(100):
print i
Run Code Online (Sandbox Code Playgroud)
是:
(2, 2)
(5, 2)
Run Code Online (Sandbox Code Playgroud)
我不知道这对我想做什么有用多少(我将其编码用于其他问题),无论如何我想要一个更聪明的方法来制作
for i in divisorGen(100):
print i
Run Code Online (Sandbox Code Playgroud)
输出这个:
1
2
4
5
10
20
25
50
100
Run Code Online (Sandbox Code Playgroud)
更新:非常感谢Greg Hewgill和他的"智能方式":)计算所有100,00000的除数用他的方式对着我的机器上的愚蠢方式的39s,非常酷:D
更新2:停止说这是这篇文章的副本.计算给定数的除数数不需要计算所有除数.这是一个不同的问题,如果你认为它不是在维基百科上寻找"除数函数".在发布之前阅读问题和答案,如果你不明白什么是主题,只是不添加没有用的已经给出的答案.