Каков наилучший способ получить все делители числа?

Вот очень тупой способ:

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

Результат, который я хотел бы получить, похож на этот, но я бы хотел более умный алгоритм (этот слишком медленный и тупой :-)

Я могу найти основные факторы и их кратность достаточно быстро. У меня есть генератор, который генерирует фактор таким образом:

(фактор1, кратность1)
(фактор2, кратность2)
(фактор3, кратность3)
и так далее...

то есть выход

for i in factorGenerator(100):
    print i

является:

(2, 2)
(5, 2)

Я не знаю, насколько это полезно для того, что я хочу сделать (я кодировал для других проблем), в любом случае, я хотел бы сделать более умный способ

for i in divisorGen(100):
    print i

выведите это:

1
2
4
5
10
20
25
50
100

ОБНОВИТЬ: Огромное спасибо Грегу Хьюгиллу и его «умному способу» :) Расчет всех делителей 100000000 занял 0,01 с его путём против 39 с, которые тупой путь взял на моей машине, очень круто: D

ОБНОВЛЕНИЕ 2: Хватит говорить, что это дубликатэто Почта. Для вычисления числа делителей заданного числа не нужно вычислять все делители. Это другая проблема, если вы думаете, что это не так, ищите «функцию делителя» в Википедии. Прочтите вопросы и ответ перед публикацией, если вы не понимаете, в чем заключается тема, просто не добавляйте не полезные и уже предоставленные ответы.

Ответы на вопрос(14)

Ваш ответ на вопрос