นี่เป็นวิธีที่โง่มาก:
def divisorGenerator(n):
for i in xrange(1,n/2+1):
if n%i == 0: yield i
yield n
ผลลัพธ์ที่ฉันต้องการจะคล้ายกับผลลัพธ์นี้ แต่ฉันต้องการอัลกอริทึมที่ชาญฉลาดกว่านี้ (อันนี้ช้าและโง่เกินไป :-)
ฉันสามารถหาปัจจัยเฉพาะและความทวีคูณได้เร็วพอ ฉันมีเครื่องกำเนิดไฟฟ้าที่สร้างปัจจัยด้วยวิธีนี้:
(factor1, multiplicity1)
(factor2, multiplicity2)
(factor3, multiplicity3)
และอื่น ๆ ...
คือผลลัพธ์ของ
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
UPDATE:ขอบคุณมากสำหรับ Greg Hewgill และ "วิธีที่ชาญฉลาด" ของเขา :) การคำนวณตัวหารทั้งหมดของ 100000000 ใช้เวลา 0.01 วินาทีเมื่อเทียบกับ 39s ที่วิธีโง่ ๆ ใช้กับเครื่องของฉันเจ๋งมาก: D
อัปเดต 2:หยุดพูดว่านี่ซ้ำกับโพสต์นี้ การคำนวณจำนวนตัวหารของจำนวนที่กำหนดไม่จำเป็นต้องคำนวณตัวหารทั้งหมด เป็นปัญหาที่แตกต่างหากคุณคิดว่าไม่ใช่ให้มองหา "ฟังก์ชันตัวหาร" ในวิกิพีเดีย อ่านคำถามและคำตอบก่อนโพสต์หากคุณไม่เข้าใจว่าหัวข้อคืออะไรอย่าเพิ่มคำตอบที่ไม่มีประโยชน์และได้รับคำตอบแล้ว