Collatz Problem
Verfasst: Montag 7. November 2016, 17:14
Nabend,
ich habe eine Aufgabe bekommen, die ich lösen soll.
Leider habe ich noch kein richtiges Verständnis für python, sodass ich um eure Mithilfe bitte.
Anbei die Aufgabe:
ci+1 = ci /2, wenn ci gerade ist bzw.
ci+1 = 3 · ci − 1, wenn ci ungerade ist.
Somit ergibt sich zum Beispiel für den Startwert n = 19 die Folge
19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1, 4, 2, 1, . . .
Es gilt, dass, sobald die Folge einmal den Wert 1 erreicht, anschließend lediglich der
Zyklus 4, 2, 1 wiederholt wird. Es wird vermutet, dass dies für jeden Startwert n passiert,
bewiesen ist dies jedoch bisher nicht. Andererseits ist kein Startwert n bekannt, für den
nicht nach einer endlichen Anzahl von Schritten der Wert 1 erreicht wird.
Schreiben Sie ein Programm collatz.py, welches für die jeden möglichen Startwert
n ∈ [1000] die Länge l(n) der Collatz-Folge zum entsprechenden Startwert ausgibt. Die
Länge von (ci)i∈N ist definiert als das kleinste i, für das ci = 1 und ∞ sonst. Es gilt
also, dass l(1) = 1, l(2) = 2, l(3) = 8 und so weiter. Ihr Programm sollte keine Eingabe
entgegennehmen und die jeweiligen Längen mit der Funktion print ausgeben.
Und so habe ich angefangen:
Leider habe ich nun keine Ahnung wie ich weitermachen sollte, vllt könnt ihr mich auf den richtigen Weg bringen.
Vielen Dank
ich habe eine Aufgabe bekommen, die ich lösen soll.
Leider habe ich noch kein richtiges Verständnis für python, sodass ich um eure Mithilfe bitte.
Anbei die Aufgabe:
ci+1 = ci /2, wenn ci gerade ist bzw.
ci+1 = 3 · ci − 1, wenn ci ungerade ist.
Somit ergibt sich zum Beispiel für den Startwert n = 19 die Folge
19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1, 4, 2, 1, . . .
Es gilt, dass, sobald die Folge einmal den Wert 1 erreicht, anschließend lediglich der
Zyklus 4, 2, 1 wiederholt wird. Es wird vermutet, dass dies für jeden Startwert n passiert,
bewiesen ist dies jedoch bisher nicht. Andererseits ist kein Startwert n bekannt, für den
nicht nach einer endlichen Anzahl von Schritten der Wert 1 erreicht wird.
Schreiben Sie ein Programm collatz.py, welches für die jeden möglichen Startwert
n ∈ [1000] die Länge l(n) der Collatz-Folge zum entsprechenden Startwert ausgibt. Die
Länge von (ci)i∈N ist definiert als das kleinste i, für das ci = 1 und ∞ sonst. Es gilt
also, dass l(1) = 1, l(2) = 2, l(3) = 8 und so weiter. Ihr Programm sollte keine Eingabe
entgegennehmen und die jeweiligen Längen mit der Funktion print ausgeben.
Und so habe ich angefangen:
Code: Alles auswählen
def collatz(n):
while n > 1:
if n % 2:
n = 3 * n +1
else:
n /= 2
return nVielen Dank