Code: Alles auswählen
from collections import defaultdict
from itertools import combinations
def primefactors(n):
pfs = defaultdict(int)
pf = 2
while pf ** 2 <= n:
if not n % pf:
n /= pf
pfs[pf] += 1
else:
pf += 1
if n > 1: pfs[n] += 1
return [(pf,count) for pf, count in pfs.iteritems()]
def divisors(n):
divisors = set()
pf = list()
for p,a in primefactors(n):
pf.extend([p]*a)
for i in xrange(1,len(pf)+1):
for j in combinations(pf,i):
divisors.add(reduce(lambda x, y: x*y, j))
return [1] + sorted(divisors)
print divisors(67679860)
Bei SPOJ oder projecteuler kann man damit allerdings keinen Blumentopf gewinnen. Die primefactors ist noch n'bissl lahm.