Inilah cara yang sangat bodoh:
def divisorGenerator(n):
for i in xrange(1,n/2+1):
if n%i == 0: yield i
yield n
Hasil yang ingin saya dapatkan mirip dengan yang ini, tetapi saya ingin algoritme yang lebih cerdas (yang ini terlalu lambat dan bodoh :-)
Saya dapat menemukan faktor prima dan multiplisitasnya dengan cukup cepat. Saya memiliki generator yang menghasilkan faktor dengan cara ini:
(faktor1, multiplisitas1)
(faktor2, multiplisitas2)
(faktor3, multiplisitas3)
dan seterusnya ...
yaitu keluaran dari
for i in factorGenerator(100):
print i
adalah:
(2, 2)
(5, 2)
Saya tidak tahu seberapa berguna ini untuk apa yang ingin saya lakukan (saya mengkodekannya untuk masalah lain), bagaimanapun saya ingin cara yang lebih cerdas untuk membuatnya
for i in divisorGen(100):
print i
keluaran ini:
1
2
4
5
10
20
25
50
100
PEMBARUAN: Terima kasih banyak kepada Greg Hewgill dan "cara cerdasnya" :) Menghitung semua pembagi dari 100000000 membutuhkan 0,01 detik dengan caranya melawan angka 39 yang dilakukan oleh cara bodoh pada mesin saya, sangat keren: D
UPDATE 2: Berhenti mengatakan ini adalah duplikat dari posting ini . Menghitung jumlah pembagi dari bilangan tertentu tidak perlu menghitung semua pembaginya. Ini masalah yang berbeda, jika menurut Anda tidak, cari "Fungsi pembagi" di wikipedia. Bacalah soal dan jawabannya sebelum posting, jika belum paham topiknya jangan tambah tidak berguna dan sudah diberi jawaban.