İşte en aptalca yol:
def divisorGenerator(n):
for i in xrange(1,n/2+1):
if n%i == 0: yield i
yield n
Elde etmek istediğim sonuç buna benziyor, ancak daha akıllı bir algoritma istiyorum (bu çok yavaş ve aptal :-)
Asal çarpanları ve çokluklarını yeterince hızlı bulabilirim. Bu şekilde faktör üreten bir jeneratörüm var:
(faktör1, çokluk1)
(faktör2, çokluk2)
(faktör3, çokluk3)
ve benzeri ...
yani çıktısı
for i in factorGenerator(100):
print i
dır-dir:
(2, 2)
(5, 2)
Bunun yapmak istediğim şey için ne kadar yararlı olduğunu bilmiyorum (başka problemler için kodladım), yine de yapmak için daha akıllı bir yol istiyorum
for i in divisorGen(100):
print i
bu çıktı:
1
2
4
5
10
20
25
50
100
GÜNCELLEME: Greg Hewgill'e ve onun "akıllı yolu" na çok teşekkürler :) 100000000'ün tüm bölenlerini hesaplamak, makinemde aptalca yolun aldığı 39'lara karşı 0,01 saniye sürdü, çok havalı: D
GÜNCELLEME 2: Bunun bu gönderinin kopyası olduğunu söylemeyi bırakın . Belirli bir sayının bölen sayısını hesaplamak, tüm bölenleri hesaplamak zorunda değildir. Bu farklı bir problem, eğer olmadığını düşünüyorsanız, wikipedia'da "Divisor işlevi" ni arayın. Yayınlamadan önce soruları ve cevabı okuyun, konunun ne olduğunu anlamadıysanız, sadece yararlı olmayan ve zaten verilen cevapları eklemeyin.