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.