Teiler von x
Verfasst: Donnerstag 10. September 2009, 22:00
Wenn man nach Divisor googelt findet man einige smarte Formeln für die Anzahl der Teiler von x oder die Summe der Teiler. Eine Funktion, die die Divisoren zurückgibt habe ich nicht gefunden. Hier meine Lösung.
Der Code läuft so nur mit 2.6, weil combinations erst ab 2.6 verfügbar. Ich habe es allerdings mit 2.5 entwickelt und mir die combinations Routine von hier http://docs.python.org/library/itertools.html geklaut. Wenns Probleme gibt, kann ich auch noch mal den kompletten 2.5er Code irgendwo pasten.
Bei SPOJ oder projecteuler kann man damit allerdings keinen Blumentopf gewinnen. Die primefactors ist noch n'bissl lahm.
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.