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.

Applicazioni e Curiosità

I numeri amicabili hanno affascinato i matematici per secoli. Oltre al loro significato numerico, sono stati attribuiti loro valori simbolici e mistici. Nella programmazione, la ricerca di numeri amicabili può servire come un ottimo esercizio per affinare la comprensione degli algoritmi e delle strutture dati in JavaScript. Inoltre, esplorare concetti matematici attraverso la programmazione può offrire una prospettiva unica e arricchire la conoscenza matematica.

Conclusioni

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.