Qual é a melhor maneira de obter todos os divisores de um número?

Aqui está o jeito mudo:

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

O resultado que eu gostaria de obter é semelhante a este, mas eu gostaria de um algoritmo mais inteligente (este é muito lento e idiota :-)

Eu posso encontrar fatores primos e sua multiplicidade rápido o suficiente. Eu tenho um gerador que gera fator desta maneira:

(fator1, multiplicidade1)
(factor2, multiplicidade2)
(fator3, multiplicidade3)
e assim por diante...

ou seja, a saída de

for i in factorGenerator(100):
    print i

é:

(2, 2)
(5, 2)

Eu não sei o quanto isso é útil para o que eu quero fazer (eu o codifiquei para outros problemas), de qualquer forma eu gostaria de uma maneira mais inteligente de fazer

for i in divisorGen(100):
    print i

saída isto:

1
2
4
5
10
20
25
50
100

ATUALIZAR: Muito obrigado a Greg Hewgill e seu "jeito inteligente" :) Calcular todos os divisores de 100000000 levou 0,01s com o caminho dele contra os 39s que o jeito idiota pegou na minha máquina, muito legal: D

ATUALIZAÇÃO 2: Pare de dizer que esta é uma duplicata deisto postar. Calcular o número de divisor de um determinado número não precisa calcular todos os divisores. É um problema diferente, se você acha que não é, em seguida, procure por "função do divisor" na wikipedia. Leia as perguntas e a resposta antes de postar, se você não entende o que é o tópico apenas não adicione respostas úteis e não dadas.

questionAnswers(14)

yourAnswerToTheQuestion