मैं वर्तमान में प्रोजेक्ट यूलर की समस्याओं के माध्यम से काम कर रहा हूं, और अब तक मैं इस समस्या के साथ एक समस्या के लिए आया हूं।क्या इस मेमोरी त्रुटि से बचने का कोई तरीका है?
from itertools import combinations
import time
def findanums(n):
l = []
for i in range(1, n + 1):
s = []
for j in range(1, i):
if i % j == 0:
s.append(j)
if sum(s) > i:
l.append(i)
return l
start = time.time() #start time
limit = 28123
anums = findanums(limit + 1) #abundant numbers (1..limit)
print "done finding abundants", time.time() - start
pairs = combinations(anums, 2)
print "done finding combinations", time.time() - start
sums = map(lambda x: x[0]+x[1], pairs)
print "done finding all possible sums", time.time() - start
print "start main loop"
answer = 0
for i in range(1,limit+1):
if i not in sums:
answer += i
print "ANSWER:",answer
मैं एक MemoryError
में चलाने जब मैं इस चलाते हैं।
ट्रैस बैक:
File "test.py", line 20, in <module>
sums = map(lambda x: x[0]+x[1], pairs)
मैं मैं क्या गूगल से लेकिन कोई लाभ नहीं हुआ प्राप्त करने में सक्षम किया गया है से कचरा संग्रहण को अक्षम करके यह को रोकने के लिए कोशिश की है। क्या मैं इस गलत तरीके से आ रहा हूं? मेरे सिर में यह ऐसा करने का सबसे स्वाभाविक तरीका है और मुझे इस बिंदु पर नुकसान हुआ है।
साइड नोट: मैं पीपीपी 2.0 बीटा 2 (पायथन 2.7.4) का उपयोग कर रहा हूं क्योंकि यह मेरे द्वारा उपयोग किए जाने वाले किसी अन्य पायथन कार्यान्वयन से बहुत तेज़ है, और सिसि/नम्पी मेरे सिर पर हैं क्योंकि मैं अभी भी कार्यक्रम शुरू करना और मेरे पास इंजीनियरिंग या मजबूत गणित पृष्ठभूमि नहीं है।
आपको कितनी मेमोरी मिली? सिस्टम 64-बिट है? – Ofiris
64-बिट, 8 जीबी मेमोरी, हालांकि पीपीपी 32-बिट है यदि इससे कोई फर्क पड़ता है। –
आपको कहीं एक बग दिखाई देता है। यदि आप 'findanums 'रनों के बाद' लेन (एम्स) प्रिंट करते हैं, तो यह' 28123' देता है, जिसका अर्थ है _every_ संख्या एक से 28123 तक एक प्रचुर मात्रा में संख्या है। मुझे नहीं लगता कि यह सही है। – Kevin