Jaki jest najlepszy sposób na uzyskanie wszystkich dzielników liczby?

Oto bardzo głupi sposób:

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

Wynik, który chciałbym uzyskać, jest podobny do tego, ale chciałbym bardziej inteligentny algorytm (ten jest zbyt wolny i głupi :-)

Mogę wystarczająco szybko znaleźć czynniki pierwsze i ich wielość. Mam generator, który generuje czynnik w ten sposób:

(współczynnik1, krotność1)
(współczynnik 2, krotność2)
(współczynnik 3, krotność3)
i tak dalej...

tj. wyjście

for i in factorGenerator(100):
    print i

jest:

(2, 2)
(5, 2)

Nie wiem, ile to jest przydatne dla tego, co chcę zrobić (kodowałem to dla innych problemów), w każdym razie chciałbym mądrzejszy sposób na zrobienie

for i in divisorGen(100):
    print i

wyślij to:

1
2
4
5
10
20
25
50
100

AKTUALIZACJA: Bardzo dziękuję Gregowi Hewgillowi i jego „sprytnemu sposobowi” :) Obliczenie wszystkich dzielników 100000000 zajęło 0.01s na jego drodze do 39s, co głupi sposób przejął na moją maszynę, bardzo fajnie: D

AKTUALIZACJA 2: Przestań mówić, że to duplikatto słupek. Obliczanie liczby dzielników danej liczby nie musi obliczać wszystkich dzielników. Jest to inny problem, jeśli uważasz, że nie jest to „funkcja dzielnika” na wikipedii. Przeczytaj pytania i odpowiedź przed wysłaniem, jeśli nie rozumiesz, co jest tematem, nie dodawaj nieużytecznych i już udzielonych odpowiedzi.

questionAnswers(14)

yourAnswerToTheQuestion