Вот самый тупой способ:
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: перестаньте говорить, что это дубликат этого сообщения. Чтобы вычислить количество делителей данного числа, не нужно вычислять все делители. Это другая проблема, если вы думаете, что это не так, то поищите "Функция делителя" в Википедии. Прочтите вопросы и ответ перед публикацией, если вы не понимаете, о чем идет речь, просто не добавляйте бесполезные и уже предоставленные ответы.