मैं एक परियोजना यूलर समस्या पर काम कर रहा हूं जिसके लिए एक पूर्णांक के कारककरण की आवश्यकता है। मैं उन सभी प्राइम्स की एक सूची के साथ आ सकता हूं जो किसी दिए गए नंबर का कारक हैं। अंकगणितीय के मौलिक प्रमेय का तात्पर्य है कि मैं इस सूची का उपयोग प्रत्येक संख्या के कारक को प्राप्त करने के लिए कर सकता हूं।मेरे पास किसी संख्या के प्रमुख कारकों की पाइथन सूची है। मैं (पायथनिक रूप से) सभी कारकों को कैसे ढूंढूं?
मेरे वर्तमान योजना आधार अभाज्य संख्या की सूची में प्रत्येक संख्या लेने के लिए और जब तक यह नहीं रह गया है एक पूर्णांक कारक प्रत्येक प्रधानमंत्री के लिए अधिकतम घातांक को मिल रहा है अपनी शक्ति बढ़ाने के लिए है। फिर, मैं प्राइम-एक्सपोनेंट जोड़े के हर संभव संयोजन को गुणा कर दूंगा।
उदाहरण के लिए, के लिए 180:
2^0 * 3^0 * 5^0 = 1
2^1 * 3^0 * 5^0 = 2
2^2 * 3^0 * 5^0 = 4
2^0 * 3^1 * 5^0 = 3
2^1 * 3^1 * 5^0 = 6
2^2 * 3^1 * 5^0 = 12
2^0 * 3^2 * 5^0 = 9
2^1 * 3^2 * 5^0 = 18
2^2 * 3^2 * 5^0 = 36
2^0 * 3^0 * 5^1 = 5
2^1 * 3^0 * 5^1 = 10
2^2 * 3^0 * 5^1 = 20
2^0 * 3^1 * 5^1 = 15
2^1 * 3^1 * 5^1 = 30
2^2 * 3^1 * 5^1 = 60
2^0 * 3^2 * 5^1 = 45
2^1 * 3^2 * 5^1 = 90
2^2 * 3^2 * 5^1 = 180
तो कारकों = की सूची [1:
Given: prime factors of 180: [2, 3, 5]
Find maximum exponent of each factor:
180/2^1 = 90
180/2^2 = 45
180/2^3 = 22.5 - not an integer, so 2 is the maximum exponent of 2.
180/3^1 = 60
180/3^2 = 20
180/3^3 = 6.6 - not an integer, so 2 is the maximum exponent of 3.
180/5^1 = 36
180/5^2 = 7.2 - not an integer, so 1 is the maximum exponent of 5.
बाद, ये ऊपर अधिकतम प्रतिपादक करने के प्रत्येक संयोजन के कारकों पाने के लिए क्या , 2, 3, 4, 5, 6, 18, 20, 30, 36, 45, 60, 9 0, 180]
यहां मेरे पास अब तक का कोड है। दो समस्याएं: सबसे पहले, मुझे नहीं लगता कि यह बहुत पाइथनिक है। मैं इसे ठीक करना चाहता हूं। दूसरा, मैं वास्तव में संयोजन के दूसरे चरण को करने के लिए पाइथोनिक तरीका नहीं है। शर्म की बात है, मैंने तुम्हें हास्यास्पद सेट लूप से बचा लिया है।
एन वह संख्या है जिसे हम कारक बनाना चाहते हैं। listOfAllPrimes 10 मिलियन तक की प्राइम की एक पूर्व-निर्धारित सूची है।
def getListOfFactors(n, listOfAllPrimes):
maxFactor = int(math.sqrt(n)) + 1
eligiblePrimes = filter(lambda x: x <= maxFactor, listOfAllPrimes)
listOfBasePrimes = filter(lambda x: n % x ==0, eligiblePrimes)
listOfExponents = [] #(do I have to do this?)
for x in listOfBasePrimes:
y = 1
while (x**(y+1)) % n == 0:
y += 1
listOfExponents.append(y)
आपका कोड गलत है। एन के वर्ग रूट से अधिक योग्य प्राइम हो सकता है। उदाहरण के लिए, एन = 7 या एन = 22. –
@ शेल्डन एल कूपर धन्यवाद, निश्चित रूप से गलत है। मैंने एल्गोरिदम मिश्रित किया। जिज्ञासा से –
, आप किस समस्या को हल कर रहे हैं? – tokland