コラッツの問題(角谷の問題):数列{a(k)}を次のように定める.
a(1)=n (nは整数)・・・初項
a(k)=a(k-1)/2 (a(k-1)=偶数)
a(k)=3a(k-1)+1 (a(k-1)=奇数)
言い換えると,
a(1)=n (nは整数)・・・初項
前の項が偶数のときは2で割る
前の項が奇数のときは3倍して1を加える
このとき,a(k)=1となる整数kが存在する.
また,はじめてa(k)=1となるときのkをL(n)で表すことにする.
以下のプログラムをExcelのVisual Basic Editorにペースとして実行してください.
はじめてa(k)=1となるまでまでの数列{a(k)}を求める
Sub 角谷の問題()
Cells.Select
Selection.ClearContents
Dim n As Long
n = CInt(InputBox("n="))
Dim k As Long
k = 1
Cells(1, 1).Value = "k"
Cells(1, 2).Value = "a(k)"
Cells(k + 1, 1).Value = k
Cells(k + 1, 2).Value = n
Do While n > 1
If n Mod 2 = 0 Then
n = n / 2
Else
n =3 * n + 1
End If
k = k + 1
Cells(k + 1, 1).Value = k
Cells(k + 1, 2).Value = n
Loop
Range("A1").Select
End Sub
L(n)を求める
Sub 角谷の問題()
Cells.Select
Selection.ClearContents
Dim n As Long
n = CInt(InputBox("n="))
Dim k As Long
Dim l As Long
Dim s As Long
k = 1
s = 1
Cells(1, 1).Value = "n"
Cells(1, 2).Value = "length"
Cells(k + 1, 1).Value = k
Cells(k + 1, 2).Value = 1
For k = 2 To n
s = k
l = 1
Do While s > 1
If s Mod 2 = 0 Then
s = s / 2
Else
s = 3 * s + 1
End If
l = l + 1
Loop
Cells(k + 1, 1).Value = k
Cells(k + 1, 2).Value = l
Next k
Range("A1").Select
End Sub