コラッツ予想とは、以下のような操作を繰り返したときに、どんな自然数でも必ず1に到達するという予想です。

  1. 自然数nを選ぶ。
  2. nが偶数の場合、nを2で割る。
  3. nが奇数の場合、nを3倍して1を加える。
  4. 2または3のいずれかを行った結果得られた数に戻る。

例えば、n=6から始めた場合、以下のような数列が得られます。

6, 3, 10, 5, 16, 8, 4, 2, 1

この数列は最終的に1に到達するため、コラッツ予想は正しいとされています。しかし、現在までこの予想を証明することはできておらず、未解決問題の一つとして知られています。

という、予想です。

証明には、1億円の賞金がかけられています。

とりあえず、pythonでプログラムを作ってみました。

プログラム

import numpy as np

#

#CLASS numCK 数字チェック

#

class numCk:
def ck_num(self,a):

    if (self.even_odd(a)==0):
        x=a/2
        return x,self.even_odd(x)
    else:
        x=(3*a+1)/2
        return x,self.even_odd(x)

def even_odd(self,a):
    if (a % 2==0):
        return 0
    else:
        return 1

#

#Main Routine

#

n=numCk()
i=1
xin=int(input())
(x,m)=n.ck_num(xin)
print (“%d %d x=%d “%(m,i,x))

codd=0
ceven=0
cMax=0

while x !=1:
(x,m)=n.ck_num(x)
i=i+1
if m==0:
ceven=ceven+1
else:
codd=codd+1
if cMax< x:cMax=x
print (“%d %d x=%d “%(m,i,x))

print (“RESULT > in=%d even=%d odd=%d cMax=%d”%(xin,ceven,codd,cMax))

使い方

pythonで上のプログラムを軌道すると、
数字を入力するプロンプトがでてくるので、
そこで、調べたい数字を入力すると、(例えば6を入力した場合)

6
1 1 x=3 
1 2 x=5 
0 3 x=8 
0 4 x=4 
0 5 x=2 
1 6 x=1 
RESULT > in=6 even=3 odd=2 cMax=8

となります。

奇数の3n + 1の部分は偶数になるので、2で割った結果を載せています。

最初の0と1は。0:偶数、1:奇数を表しています。

証明には、かなりの時間が必要かもしれませんなあ

Categories:

No responses yet

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


最近のコメント
    Archives
    Categories