domenica 27 febbraio 2011

Progetto Eulero Problema 2

Project Euler

Eccoci di nuovo insieme per affrontare il problema n° 2 di Project Euler. Andiamo ad esaminare il problema...






Progetto Eulero Problema 2
"Ogni nuovo termine della sequenza di Fibonacci è generato sommando i due termini precedenti. Iniziando con 1 e 2, i primi 10 termini saranno:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …
Trova la somma di tutti i termini di valore pari che non superano i quattro milioni."

Per risolvere questo problema dobbiamo prima di tutto avere chiaro cosa sia la successione di Fibonacci.
Prendiamo la sequenza del problema:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89

Partendo da 1 e 2 possiamo creare ogni nuovo numero della sequenza semplicemente sommando i due numeri precedenti in questo modo:


1+2 = 3

1,2,3

2+3 = 5
1,2,3,5

3+5 = 8

1,2,3,5,8 
...


Detto questo possiamo semplicemente dire che A + B = C
Ecco un esempio di codice che stampa la sequenza di Fibonacci:

a = 1
b = 2
c = a + b

while a <= 10:  
    print a,
    a = c - a
    b = c
    c = a + b

L'output del codice sarà quindi 1,2,3,5,8 in quanto abbiamo deciso per ora di creare solo numeri minori di 10 (while a <= 10).
Il problema però ci chiede di trovare "la somma di tutti i termini di valore pari che non superano i quattro milioni", quindi dobbiamo aggiungere un metodo che ci permetta di filtrare solo i numeri pari e sommarli.
Modifichiamo il codice...


a = 1
b = 2
c = a + b
somma = 0                        #Somma dei numeri pari trovati

while a <= 4000000:
    if a%2 == 0:                  #Se a è pari aggiunge a alla somma
        somma += a
    a = c - a
    b = c
    c = a + b

print somma                      #Stampa la somma dei numeri pari nella sequenza

Certamente non è il codice piu efficente e veloce ma trova comunque la soluzione al problema. Adesso tocca a voi trovare la vostra soluzione!
Ci vediamo per il problema n° 3 !

--------------------------------------------------------------------------------------------------------------------------

Nessun commento:

Posta un commento