コラッツ予想とは、以下のような操作を繰り返したときに、どんな自然数でも必ず1に到達するという予想です。
- 自然数nを選ぶ。
- nが偶数の場合、nを2で割る。
- nが奇数の場合、nを3倍して1を加える。
- 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:奇数を表しています。 証明には、かなりの時間が必要かもしれませんなあ
No responses yet