Numeri amicabili in Python

I numeri amicabili sono una coppia di numeri interi tali che la somma dei divisori propri di un numero è uguale all'altro, e viceversa. I divisori propri di un numero sono tutti i suoi divisori escluso il numero stesso.

Ad esempio, la coppia di numeri 220 e 284 è amicabile. I divisori propri di 220 sono:

1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110

La somma di questi divisori è 284.

Analogamente, i divisori propri di 284 sono:

1, 2, 4, 71, 142

La loro somma è 220.

Poiché la somma dei divisori propri di ciascun numero è uguale all'altro, i numeri 220 e 284 formano una coppia di numeri amicabili.

In Python, possiamo scrivere codice per determinare se due numeri sono amicabili, sfruttando le funzionalità del linguaggio e implementando algoritmi basati sulla somma dei divisori.

Il processo per determinare se due numeri sono amicabili si basa su tre passaggi principali:

  1. Calcolare la somma dei divisori propri di entrambi i numeri.

  2. Verificare se la somma dei divisori del primo numero è uguale al secondo numero.

  3. Verificare se la somma dei divisori del secondo numero è uguale al primo numero.

Se entrambe le condizioni sono soddisfatte, i due numeri sono considerati amicabili.

Implementazione in Python dei numeri amicabili

Vediamo come possiamo implementare un programma in Python per trovare coppie di numeri amicabili. Il primo passo è creare una funzione che calcoli la somma dei divisori propri di un dato numero.

Questa funzione riceve un numero intero come input e restituisce la somma dei suoi divisori propri.

def somma_divisori_propri(n):     somma = 0     for i in range(1, n):         if n % i == 0:             somma += i     return somma

Ora possiamo creare una funzione che utilizza somma_divisori_propri per verificare se due numeri sono amicabili.

def sono_amicabili(num1, num2): return somma_divisori_propri(num1) == num2 and somma_divisori_propri(num2) == num1

Questa funzione chiama somma_divisori_propri per ciascun numero e confronta i risultati. Se entrambe le somme corrispondono, i numeri sono amicabili.

Mettiamo tutto insieme in un programma Python completo che permette all'utente di inserire due numeri e determina se sono una coppia di numeri amicabili.

def somma_divisori_propri(n): somma = 0 for i in range(1, n): if n % i == 0: somma += i return somma def sono_amicabili(num1, num2): return somma_divisori_propri(num1) == num2 and somma_divisori_propri(num2) == num1 # Input dall'utente num1 = int(input("Inserisci il primo numero: ")) num2 = int(input("Inserisci il secondo numero: ")) # Verifica se sono numeri amicabili if sono_amicabili(num1, num2): print(f"{num1} e {num2} sono numeri amicabili.") else: print(f"{num1} e {num2} non sono numeri amicabili.")