I numeri amicabili in JavaScript

Nel mondo della matematica, i numeri amicabili sono una coppia di numeri per i quali la somma dei divisori propri (escluso il numero stesso) di ciascun numero è uguale all'altro numero. Questo concetto risale ai tempi dei Pitagorici, che consideravano tali coppie con un senso di armonia e amicizia. Un esempio classico di numeri amicabili è la coppia (220, 284), dove la somma dei divisori propri di 220 è 284, e viceversa.

Implementare una funzione per trovare numeri amicabili in JavaScript può essere un'esercitazione interessante che combina logica di programmazione e curiosità matematica. Vediamo come possiamo farlo.

Calcolo dei divisori propri

Prima di poter cercare coppie di numeri amicabili, dobbiamo essere in grado di calcolare i divisori propri di un numero. Un divisore proprio di un numero è un divisore del numero escluso il numero stesso. Per esempio, i divisori propri di 220 sono 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 e 110, la cui somma è 284.

function sommaDivisoriPropri(num) {     let somma = 1; // 1 è sempre un divisore     for (let i = 2; i <= Math.sqrt(num); i++) {         if (num % i === 0) {             somma += i;             if (i !== num / i) {                 somma += num / i;             }         }     }     return somma; }

Questa funzione calcola la somma dei divisori propri di un numero. Utilizza il fatto che, per ogni divisore i trovato, num / i è anch'esso un divisore. Per ottimizzare, cerchiamo solo fino alla radice quadrata del numero, poiché non ci saranno divisori propri maggiori di quella.

Trovare coppie di numeri amicabili

Con la capacità di calcolare la somma dei divisori propri, possiamo ora cercare coppie di numeri amicabili. Considereremo un intervallo di numeri e cercheremo tutte le coppie di numeri amicabili entro quell'intervallo.

function trovaNumeriAmicabili(limite) {     let coppieAmicabili = [];     for (let num1 = 1; num1 <= limite; num1++) {         let num2 = sommaDivisoriPropri(num1);         if (num1 !== num2 && num1 === sommaDivisoriPropri(num2)) {             if (!coppieAmicabili.flat().includes(num2)) { // Evita duplicati                 coppieAmicabili.push([num1, num2]);             }         }     }     return coppieAmicabili; }

Questa funzione cerca coppie di numeri amicabili fino a un certo limite. Per ogni numero nell'intervallo, calcola la somma dei suoi divisori propri (num2) e poi verifica se la somma dei divisori propri di num2 è uguale a num1. Se è così, e num1 è diverso da num2 (per escludere i numeri perfetti), abbiamo trovato una coppia di numeri amicabili. Utilizziamo anche un controllo per evitare duplicati nella lista dei risultati.

La ricerca di numeri amicabili in JavaScript unisce la matematica alla programmazione in un modo che è sia educativo che divertente. Attraverso l'esercizio di calcolare divisori propri e trovare coppie di numeri amicabili, gli sviluppatori possono migliorare la loro padronanza di JavaScript e allo stesso tempo esplorare interessanti concetti matematici.