Ось дуже німий спосіб:
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: Перестаньте говорити, що це дублікат цієї публікації. Для обчислення кількості дільника заданого числа не потрібно обчислювати всі дільники. Це інша проблема, якщо ви думаєте, що це не тоді шукайте "Відокремлювальну функцію" у Вікіпедії. Прочитайте питання та відповідь перед публікацією, якщо ви не розумієте, що таке тема, просто не додайте не корисних і вже даних відповідей.