Esta é a maneira muito estúpida:
def divisorGenerator(n):
for i in xrange(1,n/2+1):
if n%i == 0: yield i
yield n
O resultado que gostaria de obter é semelhante a este, mas gostaria de um algoritmo mais inteligente (este é muito lento e burro :-)
Posso encontrar os fatores primos e sua multiplicidade com rapidez suficiente. Tenho um gerador que gera fator desta forma:
(fator1, multiplicidade1)
(fator2, multiplicidade2)
(fator3, multiplicidade3)
e assim por diante ...
ou seja, a saída de
for i in factorGenerator(100):
print i
é:
(2, 2)
(5, 2)
Não sei o quanto isso é útil para o que quero fazer (codifiquei para outros problemas), de qualquer forma, gostaria de uma maneira mais inteligente de fazer
for i in divisorGen(100):
print i
envie este:
1
2
4
5
10
20
25
50
100
ATUALIZAÇÃO: Muito obrigado a Greg Hewgill e seu "jeito inteligente" :) Calculando todos os divisores de 100000000 levou 0,01s com seu caminho contra os 39s que o modo idiota pegou na minha máquina, muito legal: D
ATUALIZAÇÃO 2: Pare de dizer que esta é uma duplicata desta postagem. Calcular o número do divisor de um determinado número não precisa calcular todos os divisores. É um problema diferente, se você acha que não é, então procure por "Função Divisor" na wikipedia. Leia as perguntas e a resposta antes de postar, se você não entende qual é o assunto, simplesmente não acrescente respostas inúteis e já dadas.