見出し画像

Excelのマクロを使って遊んでみた

どうも。そろそろテストが近いのでnote毎日更新一旦やめようかなと思っている筆者です。例によってゼノブレイドの進捗がなく、かといって麻雀ネタは人を選ぶので、あんまり連続で書きたくないと思って、話のネタになりそうなものを探していったところ、こんなものを見つけました。

なにこれ面白そう。もちろんこの問題を解いて懸賞金ゲットだぜ。を目指すわけではありません(バイトした方が絶対稼げる)。ただちょっと身近な数字を使って、本当にこうなるの?と確かめてみたくなりました。が、手計算は面倒くさいので、Excelのマクロ使えばいいんじゃね?記事のネタになるし一石二鳥じゃんと思った次第です。早速解説します。

(なお筆者はExcelのマクロは遊び程度しか使わないので、知識はあいまいだし、1ミリくらいしか使いこなしてません)

まずコラッツ予想についてです。どのような正の整数でも、偶数の場合は2で割る、奇数の場合は3倍して1を足す、という操作をして、出てきた数に対しても太字の操作をして、そのまた出てきた数に対しても…と繰り返すと、最終的に必ず1になるという予想らしいです。さあこれを1~100の正の整数でやってみたやつをマクロに実装してみましょう。

といってもいきなりはちと難しいので、まずは1つの正の整数にこの操作をすることを考えて整理してみましょう

① 好きな正の整数nを選ぶ。
② nが偶数か奇数か判断する。偶数なら③-1、奇数なら③-2へ行く。
③-1 nを2で割る。その数を新たなnとする。②へ戻る。
③-2 nを3倍して1を足す。その数を新たなnとする。②へ戻る。

ていう感じですね。でもこれだと1になっても終わってくれず永遠に続く地獄が始まるので数が1になったらおしまいにしましょう。

① 好きな正の整数nを選ぶ。
② nが1なら終了。そうでないなら③へ。
③ nが偶数か奇数か判断する。偶数なら④-1、奇数なら④-2へ行く。
④-1 nを2で割る。その数を新たなnとする。②へ戻る。
④-2 nを3倍して1を足す。その数を新たなnとする。②へ戻る。

さあじゃあ正の整数1~100まででこの操作をやってみましょう。

① t=1 とする。
② n=t とする。
③ nが1なら⑥へ。そうでないなら④へ。
④ nが偶数か奇数か判断する。偶数なら⑤-1、奇数なら⑤-2へ行く。
⑤-1 nを2で割る。その数を新たなnとする。③へ戻る。
⑤-2 nを3倍して1を足す。その数を新たなnとする。③へ戻る。
⑥ tに1を加える。
⑦ tが101なら終了。100以下なら②へ。

もうここまで来たら、後は書くだけだ!!そして書き終わったものがこちらになります(一番わけわかんないところを飛ばしていくスタイル)。

Sub コラッツ予想()

Dim t As Long
Dim s As Long
Dim n As Long


t = 1

Cells.Clear


For t = 1 To 100

s = 1

Cells(s, t) = t

n = t

While n > 1

s = s + 1

If n Mod 2 = 0 Then

n = n / 2

Else

n = 3 * n + 1

End If

Cells(s, t) = n

Wend

Next t

End Sub

せっかくなので、ワークシートに途中経過を記述することにしました(詳しくは説明しない)。結果はこんな感じ。

画像1

おぉーーー。このあとも100までちゃんと最後1になります。すごい。ちなみに97が一番1になるまで操作を繰り返すことが必要で、その回数は118回。さあここで遊びは終わりませんよ。まずは1000までやってみましょう。878で178回操作が最大でした。そんなに増えないのね。じゃあ今度は、3*n+1を変えるとどうなるか。ちなみに、最終的に1にならない場合、永遠の地獄が幕を開ける。5*n+1でそれは起こった。

画像2

見てもらえれば分かるが。26,13,66,33,166,83,416,208,104,52,26で循環してしまっている。なるほどですね。こうなってしまうと最終的に1になることは絶対ない。それが3*n+1で起こるかどうか。その答えはまだ分からないわけですか。いったいどうなるんでしょうね。まあでも遊びなので今日はこの辺で。

この記事が気に入ったらサポートをしてみませんか?