यहाँ बहुत ही गूंगा तरीका है:
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
अद्यतन: ग्रेग हेवगिल और उनके "स्मार्ट तरीके" के लिए बहुत धन्यवाद :) 100000000 के सभी विभाजकों की गणना करते हुए 0.01s ने 39 के खिलाफ अपने रास्ते से ले लिया कि गूंगा रास्ता मेरी मशीन पर ले गया, बहुत अच्छा: डी
UPDATE 2: यह कहना बंद करें कि यह इस पोस्ट का डुप्लिकेट है । किसी दिए गए नंबर के विभाजक की संख्या की गणना करने के लिए सभी विभाजकों की गणना करने की आवश्यकता नहीं है। यह एक अलग समस्या है, अगर आपको लगता है कि यह विकिपीडिया पर "डिवाइज़र फ़ंक्शन" की तलाश में नहीं है। पोस्ट करने से पहले सवाल और जवाब पढ़ें, अगर आपको समझ नहीं आ रहा है कि क्या विषय है तो बस उपयोगी नहीं जोड़ें और पहले से ही दिए गए उत्तर।