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