擅长:python、mysql、java
<p>给你:</p>
<pre><code>from collections import defaultdict
from math import sqrt
def factor(n):
i = 2
limit = sqrt(n)
while i <= limit:
if n % i == 0:
yield i
n = n / i
limit = sqrt(n)
else:
i += 1
if n > 1:
yield n
def factorGenerator(n):
d=defaultdict(int)
for f in factor(n):
d[f]+=1
return [(e,d[e]) for e in sorted(d.keys())]
def divisorGen(n):
factors = factorGenerator(n)
nfactors = len(factors)
f = [0] * nfactors
while True:
yield reduce(lambda x, y: x*y, [factors[x][0]**f[x] for x in range(nfactors)], 1)
i = 0
while True:
f[i] += 1
if f[i] <= factors[i][1]:
break
f[i] = 0
i += 1
if i >= nfactors:
return
print list(divisorGen(10))
</code></pre>
<p>印刷品:</p>
^{pr2}$