“Mathematics is not yet ready for such problems.” [Paul Erdös]
Abstract
Die Collatz Vermutung für naturliche Zahlen:
Eine gerade Zahl wird halbiert
Eine ungerade Zahl wird verdreifacht und um 1 erhöht
Wenn Sie die oben genannten Regeln wiederholt anwenden, gelangen Sie stets zur Zahl 1.
Beispiel
Wenn Sie mit 5 beginnen, erhalten Sie die Folge 5, 16, 8, 4, 2, 1, die eine Collatz Länge von 6 besitzt.
Appendix – sbCollatz Programmcode
Bitte den Haftungsausschluss im Impressum beachten.
Option Explicit
Function sbCollatz(s As String) As Long
'Calculates the Collatz length of a positive integer =
'returns count of iterations until result is 1.
'Excel is not the best tool to implement this but here we are:
'Source (EN): http://www.sulprobil.de/sbcollatz_en/
'Source (DE): http://www.berndplumhoff.de/sbcollatz_de/
'(C) (P) by Bernd Plumhoff 17-Jul-2022 PB V0.2
Dim b As Boolean, c As Integer
Dim i As Long, j As Long, k As Long, m As Long, n As Long, p As Long
n = Len(s)
m = n + 20 'We assume 20 additional digits will suffice
ReDim t(1 To m) As Integer
For i = 1 To n
t(m - n + i) = Mid(s, i, 1)
Next i
b = False
For j = 1 To m - 1
If t(j) <> 0 Then Exit For
Next j
k = 1
If j = m And t(m) < 2 Then
t(m) = 1
b = True
End If
Do While Not b
k = k + 1
Select Case t(m)
Case 0, 2, 4, 6, 8
'Divide by 2
c = 0
For j = 1 To m
p = 5 * (t(j) Mod 2)
t(j) = t(j) \ 2 + c
c = p
Next j
Case 1, 3, 5, 7, 9
'Multiply by 3 and add 1
c = 1
For j = m To 1 Step -1
p = 3 * t(j) + c
t(j) = p Mod 10
c = p \ 10
Next j
Debug.Assert c = 0 'If we fail here the number of additional digits was too small
Case Else
Debug.Assert False
End Select
For j = 1 To m - 1
If t(j) <> 0 Then Exit For
Next j
If j = m And t(m) = 1 Then b = True
'If you like you can print out t() here
Loop
sbCollatz = k
End Function
Download
Bitte den Haftungsausschluss im Impressum beachten.
sbCollatz.xlsm [20 KB Excel Datei, Download und Nutzung auf eigene Gefahr]