La somma di tutti i numeri compresi tra due estremi

Dati due numeri interi, il primo più piccolo del secondo, si vuole calcolare la somma di tutti gli interi compresi tra questi due estremi, inclusi i due estremi.

Un approccio impulsivo farebbe sommare una alla volta ogni singola cifra. Sembrerebbe banale, ma dover eseguire questa operazione su estremi molto distanti tra loro può essere un’operazione molto ardua se non infinita. Per questo motivo mi sono chiesto se c’era una soluzione snella e di facile esecuzione.

Qui voglio mostrare come si dovrebbe approcciare a questo, ma in generale, a qualsiasi problema che debba essere risolto da un software. Alla fine di questo articolo avremo una soluzione elegante e funzionale al problema.

Per prima cosa ho iniziato a giocare con i numeri ed ho scoperto una proprietà che poi mi ha aiutato ad elaborare una funzione generale per risolvere il problema.

Approccio

Ipotizziamo di voler fare la somma di tutti gli interi compresi tra 1 e 10, con questi ultimi inclusi. La somma è uguale a 55.

Una proprietà che ho scoperto è che se prendo i primi cinque numeri – 1, 2, 3, 4, 5 – e li sommo rispettivamente con gli altri cinque, inversamente ordinati – 10, 9, 8, 7, 6 – ho sempre lo stesso risultato e cioè 11. Quindi ho 5 coppie di risultati uguali. Salta subito all’occhio che 11 e 55 hanno qualcosa in comune. Infatti 55 diviso 11 è uguale a 5; che guarda caso è uguale al numero di coppie che ho sommato.

Ora tutto questo ragionamento va reso una funzione, e va anche verificato che funzioni in tutti i casi.

Formulazione

In pratica, bisogna moltiplicare la somma di una coppia per il numero delle coppie.

La somma di una coppia è facile da calcolare, basta sommare i due numeri estremi – come suggerito dalla prima coppia che abbiamo scritto nell’esempio precedente – e cioè 1 + 10.

Per calcolare, invece, il numero delle coppie, bisogna calcolare la differenza tra l’estremo più grande e quello più piccolo e dividere per due. Tuttavia, facendo in questo modo, avremo il numero delle cifre a partire dall’estremo più piccolo, escluso quest’ultimo. Per cui, al risultato della differenza, aggiungeremo 1. Perciò avremo (10 – 1 + 1) / 2.

Moltiplicando tra loro la somma della coppia col risultato della differenza diviso due, avremo come risultato un numero che coincide con la somma di tutti i numeri interi compresi tra due interi.

Soluzione

Sostituiamo le variabili ai numeri così da scrivere una funzione:

Dove x e y sono interi relativi ed y è maggiore di x. Ovviamente, questa funzione matematica si può trasformare in qualsiasi momento in una funzione di un qualsiasi linguaggio di programmazione.

Con questa formula impieghiamo pochi secondi a calcolare la somma di tutti i numeri da 724 a 18.765 (il risultato è 175.810.269):

La bellezza e l’eleganza di questa funzione matematica (frutto del ragionamento) riduce il tutto ad una somma, una sottrazione, una divisione ed una moltiplicazione.

Note

Qualcuno mi ha detto che una versione di questa formula fu probabilmente “pensata” da Johann Carl Friedrich Gauss, che a 9 anni calcolò in pochi secondi la somma delle cifre da 1 a 100. Applico la seguente formula:

Tuttavia quella da me derivata è più potente visto che calcola la somma tra qualsiasi estremi, anche negativi. Ovviamente non ho la presunzione di aver scoperto nulla, sarebbe interessante sapere chi l’ha già elaborata e come si chiama; ad oggi non ho ancora avuto una risposta.

Add a Comment