Simulatore congettura di goldbach

di il
2 risposte

Simulatore congettura di goldbach

La funzione che ho scritto è una simulazione della congettura di goldbach (forte, per chi già la conosce) che afferma che ogni numero pari maggiore di 2 può essere ottenuto dalla somma di due numeri primi. Il funzionamento della funzione è banale e poco ottimizzato, ma nonostante sia così semplice non funziona.

def gold(a):
     l = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] # numeri primi 1 - 100
     lfin = [] # lista che restituisco alla fine contenente i numeri primi che formano 'a'
     for i in l: 
         if (a-i) in l == True: # se a - il numero primo corrente è un numero della lista 
             lfin.append(i) # aggiungo il numero corrente alla lista
             lfin.append(a-i) # e aggiungo alla lista il numero primo che sommato 'i' fa 'a'
             return lfin
Invece che restituire la lista che contiene dei numeri la funzione restituisce sempre None e penso sia un errore attinente all'utilizzo delle liste.

2 Risposte

  • Re: Simulatore congettura di goldbach

    Ciao,
    Non sono praticissimo di Python, ma secondo me, il test
    if (a-i) in l == True:
    eseguito in questo modo dovrebbe valutare la presenza di a-i nel valore True, quindi la lista non viene mai popolata.

    Prova a correggere il codice in questo modo e vedi se da il risultato che ti aspetti:
    def gold(a):
        l = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] # numeri primi 1 - 100
        lfin = [] # lista che restituisco alla fine contenente i numeri primi che formano 'a'
        for i in l: 
            if (a-i) in l: # se a - il numero primo corrente è un numero della lista 
                lfin.append(i) # aggiungo il numero corrente alla lista
                lfin.append(a-i) # e aggiungo alla lista il numero primo che sommato 'i' fa 'a'
        	    return lfin
    TheTruster
  • Re: Simulatore congettura di goldbach

    Metti il test tra parentesi:
    def gold(a):
         l = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] # numeri primi 1 - 100
         lfin = [] # lista che restituisco alla fine contenente i numeri primi che formano 'a'
         for i in l: 
             if ((a-i) in l) == True: # se a - il numero primo corrente è un numero della lista 
                 lfin.append(i) # aggiungo il numero corrente alla lista
                 lfin.append(a-i) # e aggiungo alla lista il numero primo che sommato 'i' fa 'a'
                 return lfin
    
Devi accedere o registrarti per scrivere nel forum
2 risposte