Ricerca dei numeri amicabili in C

Nel vasto mondo della matematica, esistono concetti che affascinano per la loro eleganza e semplicità. Uno di questi è il concetto di numeri amicabili, una coppia di numeri interi positivi che presentano una caratteristica sorprendente: ciascun numero è la somma dei divisori propri dell'altro. Questo articolo esplora la natura dei numeri amicabili e come questi possano essere implementati e identificati utilizzando il linguaggio di programmazione C.

Cos'è un numero amicabile?

Un numero amicabile è un membro di una coppia di numeri interi dove la somma dei divisori propri (escluso il numero stesso) di un numero è uguale all'altro numero e viceversa. Ad esempio, la coppia (220, 284) è amicabile perché la somma dei divisori propri di 220 (1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110) è 284, e la somma dei divisori propri di 284 (1, 2, 4, 71, 142) è 220.

Implementazione dei numeri amicabili in C

Per trovare coppie di numeri amicabili utilizzando il linguaggio C, dobbiamo seguire alcuni passaggi chiave. Primo, dobbiamo essere in grado di calcolare la somma dei divisori propri di un numero. Successivamente, useremo questa funzione per identificare coppie amicabili entro un certo intervallo.

Iniziamo definendo una funzione che calcola la somma dei divisori propri di un numero intero:

#include <stdio.h> // Funzione per calcolare la somma dei divisori propri int sommaDivisori(int n) { int somma = 1; // 1 è sempre un divisore proprio for (int i = 2; i * i <= n; i++) { if (n % i == 0) { somma += i; if (i != n / i) { somma += n / i; } } } return somma; }

Questa funzione scorre tutti i possibili divisori di n fino alla radice quadrata di n, poiché non sono necessari controlli oltre questo punto. Se i è un divisore di n, viene aggiunto alla somma. Se n / i è diverso da i, anche n / i viene aggiunto per evitare di sommare due volte lo stesso divisore in caso di numeri quadrati perfetti.

Con la funzione sommaDivisori a disposizione, possiamo cercare coppie di numeri amicabili:

void trovaAmicabili(int limite) { for (int a = 1; a <= limite; a++) { int b = sommaDivisori(a); if (b > a && sommaDivisori(b) == a) { printf("(%d, %d)\n", a, b); } } } int main() { int limite = 10000; printf("Coppie di numeri amicabili fino a %d:\n", limite); trovaAmicabili(limite); return 0; }

Questo programma cerca coppie amicabili fino a un limite specificato. Per ogni numero a fino al limite, calcola b come la somma dei divisori propri di a. Se b è maggiore di a e la somma dei divisori propri di b è uguale ad a, allora (a, b) è una coppia amicabile, che viene quindi stampata.

Conclusioni

I numeri amicabili rappresentano un affascinante fenomeno matematico che incarna la bellezza nascosta nei numeri e nelle loro relazioni. Implementando un semplice programma in C, possiamo esplorare queste relazioni e scoprire coppie amicabili che hanno affascinato matematici per secoli.

Indice pagine linguaggio C: