Vediamo come verificare la congettura di Collatz con C++. Questo semplice script matematico consente di sperimentare la correttezza dell’assunto matematico formulato da Lothar Collatz nel 1937 secondo il quale qualsiasi numero intero al termine di una particolare sequenza di operazioni restituisce come valore finale 1.
Cos’è la Congettura di Collatz?
La Congettura di Collatz, nota anche come la Congettura di Ulam o di Syracuse, è un interessante problema matematico che riguarda una ipotetica proprietà di una sequenza di numeri interi: essa afferma che per qualsiasi numero intero positivo scelto come punto di partenza, la sequenza generata dalla seguente procedura:
- se il numero è pari, dividere per 2
- se il numero è dispari, moltiplicare per 3 e poi aggiungere 1
alla fine giungerà sempre a 1, indipendentemente dal punto di partenza scelto. Nonostante sia stata formulata nel 1937, la congettura di Collatz non è ancora stata provata o smentita in modo definitivo: fino ad oggi, infatti, nessuno è stato in grado di dimostrarne in modo inconfutabile la veridicità (nonostante la sua prova sul campo abbia sempre portato al risultato atteso).
Testare la Congettura di Collatz in C++
Di seguito un semplice script per testare la Congettura di Collatz su un qualsiasi numero intero (vi avviso: sino ad ora qualsiasi numero ha sempre dato 1 al termine dell’elaborazione).
#include <iostream>
using namespace std;
int main() {
long long n;
cout << "Inserisci un numero intero positivo: ";
cin >> n;
while (n != 1) {
cout << n << " ";
if (n % 2 == 0) {
n = n / 2;
} else {
n = n * 3 + 1;
}
}
cout << n << endl;
return 0;
}
Questo codice chiede all’utente di inserire un qualsiasi numero intero positivo, quindi genera la sequenza di Collatz partendo da quel numero. La sequenza viene visualizzata a schermo e il programma termina quando il numero raggiunge 1.
E’ bene precisare che, seppur non sia stata mai smentita, teoricamente il programma potrebbe non terminare mai in quanto fino ad oggi non è stato provato che la Congettura di Collatz sia corretta.