In questa lezione realizzeremo un programma sui numeri amicabili in Python, al fine di esercitarci con le strutture iterative.

Ricordiamo che due numeri si dicono amicabili se la somma dei divisori propri di uno, escluso però il numero stesso, è uguale all’altro numero e viceversa.

Ad esempio i numeri 220 e 284 sono amicabili.

Infatti i divisori di 220 sono 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 e 110. La loro somma mi dà 284.

Allo stesso modo troviamo i divisori di 284: 1, 2, 4, 71, 142 la cui somma fa 220.

Quindi i numeri sono amicabili.

L’algoritmo risolutivo consiste dunque nel trovare tutti i divisori del primo numero, escluso il numero stesso, sommarli e confrontarli con l’altro numero. Allo stesso modo con il secondo numero.

Quindi innanzitutto prendiamo in input i due numeri interi e li memorizziamo in due variabili numero1 e numero2. Dopo inizializziamo le variabili div, somma1 e somma2.

La variabile div rappresenta il divisore e viene inizializzata ad 1 all’inizio e dopo il primo while, perché ci servirà per l’altro numero. In alternativa si poteva utilizzare un’altra variabile.

Dopo con il ciclo while troviamo tutti i divisori del numero1 e li sommiamo nella variabile somma1. Lo stesso per l’altro numero per cui sommiamo i divisori nella variabile somma2.

Infine compariamo somma1 con numero2 e somma2 con numero1. Se entrambe le uguaglianze sono verificate allora i numeri sono amicabili, altrimenti non lo sono.

Ecco dunque il codice completo dell’algoritmo sui numeri amicabili in Python:

numero1=int(input(‘Inserire il primo numero: ‘))

numero2=int(input(‘Inserire il secondo numero: ‘))

div,somma1,somma2=1,0,0

while div<=numero1/2:

if numero1%div==0:

somma1+=div

div+=1

div=1 #riportiamo il divisore ad 1

while div<=numero2/2:

if numero2%div==0:

somma2+=div

div+=1

if somma1==numero2 and somma2==numero1:

print(‘I numeri sono amicabili!’)

else:

print(‘I numeri non sono amicabili!’)

Potremmo aggiungere un controllo, perché in effetti è inutile trovare tutti i divisori del secondo numero, se somma1 è diverso da numero2.

Quindi sarebbe opportuno trovare i divisori del secondo numero solo se la condizione somma1 uguale a numero2 è soddisfatta.

Lo stesso algoritmo lo abbiamo realizzato con algobuild: numeri amicabili con Algobuild.

Chiaramente questo è solo uno dei possibili modi per implementare l’algoritmo sui numeri amicabili in Python, dite pure la vostra nei commenti sotto.

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

8 – Errori in Python

9 – Script Python

10 – Scambio di variabili