Hier ist der sehr dumme Weg:
def divisorGenerator(n):
for i in xrange(1,n/2+1):
if n%i == 0: yield i
yield n
Das Ergebnis, das ich gerne hätte, ist ähnlich wie dieses, aber ich hätte gerne einen intelligenteren Algorithmus (dieser ist zu langsam und dumm :-)
Ich kann Primfaktoren und ihre Vielfalt schnell genug finden. Ich habe einen Generator, der auf diese Weise Faktoren erzeugt:
(Faktor1, Multiplizität1)
(Faktor2, Multiplizität2)
(Faktor3, Multiplizität3)
und so weiter ...
dh die Ausgabe von
for i in factorGenerator(100):
print i
ist:
(2, 2)
(5, 2)
Ich weiß nicht, wie nützlich dies für das ist, was ich tun möchte (ich habe es für andere Probleme codiert), trotzdem möchte ich eine intelligentere Methode
for i in divisorGen(100):
print i
Geben Sie Folgendes aus:
1
2
4
5
10
20
25
50
100
UPDATE: Vielen Dank an Greg Hewgill und seinen "intelligenten Weg" :) Das Berechnen aller Teiler von 100000000 dauerte 0,01 Sekunden mit seinem Weg gegen die 39er, die der dumme Weg auf meiner Maschine nahm, sehr cool: D.
UPDATE 2: Hör auf zu sagen, dass dies ein Duplikat dieses Beitrags ist. Um die Anzahl der Teiler einer bestimmten Zahl zu berechnen, müssen nicht alle Teiler berechnet werden. Es ist ein anderes Problem, wenn Sie denken, dass dies nicht der Fall ist, suchen Sie auf Wikipedia nach "Divisor-Funktion". Lesen Sie die Fragen und die Antwort vor dem Posten. Wenn Sie das Thema nicht verstehen, fügen Sie einfach keine nicht nützlichen und bereits gegebenen Antworten hinzu.