In questi articoli cercherò di illustrarvi gli algoritmi risolutivi del Progetto Eulero a scopo didattico e di guida nel caso di problemi particolarmente ostici.
Il problema 1 del Progetto Eulero recita più o meno cosi:
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
Bene. Il primo problema, in quanto primo è molto semplice. Dobbiamo trovare tutti i numeri minori di mille tali che siano divisibili interamente da 3 o da 5 e sommarli insieme. In Python l’algoritmo risolutivo ha più o meno questa forma.
target=1000
sum=0
for i in range(1,target)
if (i % 3==0) or (i % 5)==0 :
sum+=i
print sum
Incollatelo in un file .py ed eseguitelo col classico “python nomefile.py“.
Le prime due righe sono chiaramente assegnazioni di variabili. In Python non è necessario dichiarare ne il tipo della variabile ne la variabile stessa, un po come succede nel PHP.
Il ciclo for è invece decisamente interessante. Per chi conosce il Java, il costrutto for di Python ricorda molto il costrutto for…each.
In pratica la variabile i assumerà il ruolo di iteratore nella lista passata dopo in, assumerà cioè il valore di ogni elemento della lista.
La lista nel nostro caso è la lista generata da range(1,target). range(x,y) genererà una lista di interi che va da x a y-1. Per esempio range(3,8) restituirà [3,4,5,6,7].
In range è possibile anche definire il “passo”. Per esempio range(3,2,8) restituirà [3,5,7]. Come si vede va da 3 a 7 con il passo di 2.
L’ if invece è simile a molti altri linguaggi di programmazione e nel nostro caso controlla se il resto della divisione fra il numero in esame e 3 o 5 sia zero. Se affermativo il numero viene sommato.