Das 3n+1 Problem

Norweger

Grünschnabel
Hallo!

Ich stecke gerade in meinem Programm fest und weiß nicht mehr, wie ich weitermachen soll:

Option Explicit
Dim start As Integer
Dim n As Integer
Dim zaehler As Integer




Private Sub Command1_Click()
start = Text1.Text
n = start
zaehler = 0

If n / 2 = 1 Then Label2.Caption = "Wert 1 wurde erreicht"
If n Mod 2 = 0 Then
Do Until n = 1
DoEvents
zaehler = zaehler + 1
n = n / 2
Do Until n = 1
DoEvents
n = n / 2
Loop
Loop
End If

If start Mod 2 <> 0 Then n = start * 3 + 1
End Sub

Private Sub Command2_Click()
End
End Sub

Private Sub Command3_Click()
Text1.Text = ""
Label1.Caption = ""
Label2.Caption = ""
End Sub


Zur Erklärung:

Gegeben ist eine beliebige natürliche Zahl, aus der sich eine Folge von Zahlen nach folgenden Regeln bildet.
Ist die Zahl gerade, so ist die nächste Zahl gleich der halben Zahl. Ist die Zahl ungerade, so wird die Zahl verdreifacht und um 1 erhöht. Das ist dann die nächste Zahl. Merkwürdigerweise erreicht diese Folge immer die Zahl 1.
Beispiel 1: Die erste Zahl ist 16.
Folge: 16, 8, 4, 2, 1

Beispiel 2: Die erste Zahl ist 15.
Folge: 46, 23, 70, 35, 106, 53, 106, 53, 160, 80, 40, 20,10, 5, 16, ,8 ,4 ,2 ,1


Ich hoffe, ihr könnt mir helfen.

MfG
Norweger
 
Dass die Folge irgendwann mit einer Eins endet, ist IMHO nichts merkwürdiges, sondern eigentlich vorhersehbar. Wenn Du eine ungerade Zahl mit 3 multiplizierst und 1 addierst, bekommst Du ja in jedem Fall eine gerade Zahl heraus. Es ist vermutlich nur eine Frage der Zeit, bis Du dabei eine Zahl herausbekommst, die das Ergebnis einer Potenz mit Basis 2 ist - und ab dann lässt sich die Zahl so lange durch 2 teilen, bis 2^0 herauskommt, und das ist ja schliesslich 1.

War das Dein Problem oder wolltest Du irgendwas anderes?
 

Neue Beiträge

Zurück