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