La congettura (probabilmente vera ma non ancora dimostrata) afferma che se si applica ripetutamente la formula seguente si giunge sempre al valore 1, indipendentemente dal valore di partenza (Wikipedia: Congettura di Collatz)
Ecco la sequenza che comincia da 17
| n | Pari/Dispari? | n’ |
| 17 | Dispari | 3*17+1=52 |
| 52 | Pari | 52/2=26 |
| 26 | Pari | 26/2=13 |
| 13 | Dispari | 3*13+1=40 |
| 40 | Pari | 40/2=20 |
| 20 | Pari | 20/2=10 |
| 10 | Pari | 10/2=5 |
| 5 | Dispari | 3*5+1=16 |
| 16 | Pari | 16/8=8 |
| 8 | Pari | 8/2=4 |
| 4 | Pari | 4/2=2 |
| 2 | Pari | 2/2=1 |
| 1 | STOP | |
Quando si arriva al valore 1 si interrompe l’esecuzione altrimenti si continuerebbe per sempre con 4 – 2 – 1 – 4 – 2 – 1 – …
Codice
TextWindow.Write("n = ")
n=TextWindow.ReadNumber()
While(n <> 1)
If(Math.Remainder(n,2) = 0) Then
n=n/2
Else
n=3*n+1
EndIf
EndWhile
TextWindow.WriteLine("Finito!")
Note
- Se Math.Remainder(n, 2) = 0 allora n è pari
- Se il ciclo While termina per ogni n allora la congettura è vera…
Aggiungi dei messaggi a schermo per evidenziare i passi del ciclo While
TextWindow.Write("n = ")
n=TextWindow.ReadNumber()
While(n <> 1)
TextWindow.Write(n + " -> ")
If(Math.Remainder(n,2) = 0) Then
n=n/2
Else
n=3*n+1
EndIf
TextWindow.WriteLine(n)
EndWhile