Was ist der beste Weg, um alle Teiler einer Zahl zu bekommen?

Hier ist die sehr dumme Art und Weise:

def divisorGenerator(n):
    for i in xrange(1,n/2+1):
        if n%i == 0: yield i
    yield n

Den Ergebnissen, die ich möchte zu bekommen, ist ähnlich wie diese, aber ich möchte ein intelligenter Algorithmus (es ist zu viel, langsam und dumm 🙂

Finde ich die wichtigsten Faktoren und deren Vielzahl schnell genug ist.
Ich habe einen generator, der erzeugt Faktor in dieser Art:

(factor1, multiplicity1)
(factor2, multiplicity2)
(factor3, multiplicity3)
und so weiter...

D. H. der Ausgang des

for i in factorGenerator(100):
    print i

ist:

(2, 2)
(5, 2)

Ich weiß nicht, wie viel ist das sinnvoll für das, was ich tun will (ich codiert es für andere Probleme), auf jeden Fall würde ich wie ein intelligenter Weg, um

for i in divisorGen(100):
    print i

Ausgabe:

1
2
4
5
10
20
25
50
100

UPDATE: Vielen Dank an Greg Hewgill und seine "smart-way" 🙂
Die Berechnung aller Teiler von 100000000 nahm 0.01 s mit seiner Art gegen die 39s, dass die dumme Art und Weise nahm Sie auf meine Maschine, sehr cool 😀

UPDATE 2: Aufhören zu sagen, das ist ein Duplikat von diese post. Berechnung der Anzahl der Teiler einer gegebenen Zahl muss nicht berechnet alle Teiler. Es ist ein anderes problem, wenn du denkst, es geht nicht dann suchen für die "Divisor function" auf wikipedia. Lesen Sie die Fragen und die Antwort vor der Buchung, wenn Sie nicht verstehen, was ist das Thema gerade nicht hinzufügen, die nicht nützlich sind, und die bereits gegebenen Antworten.

Kommentar zu dem Problem
Der Grund dafür, dass es wurde vorgeschlagen, diese Frage war fast ein Duplikat des "Algorithmus zur Berechnung der Anzahl der Teiler einer gegebenen Zahl" war, dass die vorgeschlagene erste Schritt, die Frage war hier finden Sie alle Teiler, die ich glaube, ist genau das, was Sie versuchen zu tun? Kommentarautor: Andrew Edgecombe
Andrew, um herauszufinden, wie viele Teiler gibt es, Sie müssen einfach zu finden der Primfaktoren und dann nutzen Sie, um zu zählen, wie viel Teiler möglicherweise. Finden Teiler ist nicht notwendig in diesem Fall. Kommentarautor: Loïc Faure-Lacroix
@Andrea Ambu, bitte korrigieren Sie die Funktion Namen Kommentarautor: minerals

InformationsquelleAutor der Frage Andrea Ambu | 2008-10-05

Schreibe einen Kommentar