Affrontando MemoryError in Python

0

Ho scritto un programma per trovare i fattori primi di un numero. Quando fornisco un numero elevato (600851475143) come input, viene visualizzato MemoryError . Di seguito è riportato il codice:

def fact(a):
    factors = []
    for i in range(1,a+1):
        if a%i == 0:
            factors.append(i)
    return factors 

num = raw_input(">>  ")
#600851475143
a = b = []
a = fact(long(num))    
for i in range(0,len(a)):
    b = fact(a[i])
    if len(b) <= 2:
        print a[i]

Dalla navigazione sono venuto a sapere che Python utilizza la memoria del computer - RAM. Sto usando Python in Unbuntu senza cambiare la sua configurazione. Devo cambiare anythig per lavorare su un computer a 64 bit. O dovrei usare qualsiasi funzione aggiuntiva (s) per aggirare questo errore

    
posta Gdek 13.01.2015 - 19:47
fonte

1 risposta

1

Ci sono vari modi per misurare la memoria utilizzata dal tuo programma, e potresti aumentare i limiti per utente o qualcosa del genere.

Tuttavia, non è necessario allocare la memoria in primo luogo, poiché è possibile generare la sequenza senza memorizzarla:

def fact(a):
    "just return a generator for the sequence you want"
    return (i for i in xrange(1,a+1) if a % i == 0)

Tieni presente che puoi anche eseguire iterazioni direttamente sulle sequenze senza doverle indicizzare ripetutamente:

for b in fact(long(num)):
    print b
    
risposta data 13.01.2015 - 20:03
fonte

Leggi altre domande sui tag