数字を並べ替えて最大値から最小値を引くと元の数に戻る
不思議な数字の現象があります。
ここに、3桁の任意の数字があるとします。
とりあえず、397。
この中の数字を並べ替えて
最大の数値と最小の数値を作成します。
最大:973 最小:379
この差(最大−最小)をとると
差:594
となります。
この操作を繰り返していきます。
元の数値
|
最大
|
最小
|
差
|
397 |
973 |
379 |
594 |
594 |
954 |
459 |
495 |
495 |
954 |
459 |
495 |
|
|
|
|
あら不思議!
差が
495で収束してしまいました。
これは他の3桁の数値から始めても495に収束します。
手計算は面倒なので、エクセルに数式を設定して確認してみましょう。
おみごと!
ただし、全て同じ数字の場合、1回目で差が0
構成する数値の差が1の場合は2回目の操作で0になります。
ここで
定義
整数の桁を並べ替えて、最大にしたもの
から最小にしたものの差を取る。
この操作によって一回目に元の値に等しくなる数を カプレカ定数(Kaprecar's constant) と 定義します。
すなわち、3桁の数値としては上記のように、
495があります。
さて、これだけでしょうか?
ここから、エクセルの数式だけでは手に負えないので、VBAを使用します。
1千万まで調べても、4個しか登場しませんでした。
ちなみに、次の数は、
63,317,664 , 97,508,421 , 554,999,445 , 864,197,532 , 6,333,176,664
…
だそうです。
なんと、稀少な数値!
使用したVBAコード
Dim 中止 As Boolean
Private Sub cmdGo1_Click()
'
' カプレカ数1を求める
'
Dim n As Long
Dim nl As Long, nr As Long
Dim r As Integer
Dim Ln As Integer
Dim i As Integer
Dim w() As String
Dim tmp1 As String, tmp2 As String
中止 = False
r = 0
n = 1
Range(Range("RESULT1"), Range("RESULT1").End(xlDown)).ClearContents
Do
Ln = Len(CStr(n))
ReDim w(Ln - 1)
For i = 1 To Ln
w(i - 1) = Mid(CStr(n), i, 1)
Next i
MySort w, 1
tmp1 = "": tmp2 = ""
For i = 1 To Ln
tmp1 = tmp1 & w(i - 1)
tmp2 = tmp2 & w(Ln - i)
Next i
nl = Val(tmp1)
nr = Val(tmp2)
If n = (nl - nr) Then
r = r + 1
Range("RESULT1").Cells(r, 1) = n
End If
n = n + 1
If n Mod 10000 = 0 Then
Range("COUNTER1").Value = n
DoEvents
End If
Loop While Not 中止
End Sub
Private Sub MySort(ByRef w() As String, Order As Integer)
'
' ソート: Order:1 昇順 -1:降順
'
Dim i As Integer, k As Integer
Dim tmp As String
Dim LB As Integer '配列の最小
Dim UB As Integer ' 最大
LB = LBound(w): UB = UBound(w)
For i = LB + 1 To UB
For k = i To LB + 1 Step -1
If Order * StrComp(w(k), w(k - 1)) > 0 Then
tmp = w(k - 1)
w(k - 1) = w(k)
w(k) = tmp
End If
Next k
Next i
End Sub
Private Sub cmdStop1_Click()
中止 = True
End Sub
証明もどき
(3桁の数の場合)
3桁の数 abc (9≧a≧b≧c≧0)とします。
abcの並び順は考慮不要(どうせ最大、最小の数値を作るときに並べ替える)
この数値にカプレカ操作を行います。
すなわち、最大値−最小値
abc - cba = XYZ (各桁をX,Y,Zとします)
ここで、
■ a=c の場合
これは、9≧a≧b≧c≧0 なので、a=b=c である。
すなわち、差は0となり、元の値には戻らない。カプレカ定数ではない。
■ a=c+1 の場合
Z=10+c−a = 10+c−(c+1)=9 上位桁からの借り a>c から
Y=10+b−1−b=9 上位桁からの借りと下位桁への貸し
X=a−1−c = c+1−1−c =0 下位桁への貸し
差は99になり、次のステップで差は0になる。カプレカ数ではない。
■ a>(c+1) の場合
Z=10+c−a 上位桁からの借り a>c から
Y=10+b−1−b=9 上位桁からの借りと下位桁への貸し
X=a−1−c 下位桁への貸し
このとき、XYZがa,b,cで作られる元の値に戻るとすると、
Y=9なので最大値、すなわち、Y=a となる。
よって、(X,Y,Z)=(b,a,c) または (c,a,b) である。
(X,Y,Z)=(b,a,c) のとき、 10+c−a=c, a=9 なので 1=0 となり、矛盾する。
(X,Y,Z)=(c,a,b) のとき、 a−1−c=c, a=9, 10+c−a=b
これを解くと、 a=9, b=5, c=4 となる。
これから、X=a−1−c=4 、 Y=9、 Z=10+c−a=5
従って、差が 495 になると、以後繰り返す。
結論:
9≧a≧b≧c≧0、(a>c+1) の3つの整数a,b,cで作られる整数に於いて
最大値から最小値を引く操作で出来る数値は、495に収束する。
abcの順序で並んでいる場合、二回目の操作で495になる。
もっとも、このように3桁や4桁、5桁を証明しても意味はないでしょう。
なぜなら、桁数を限定したら有限の個数なので、論理証明せずとも、全て計算するだけで証明できますからね!
任意の桁数で、収束(またはループ)し、
その値と桁数の関係を導き出せれば意味がありますが、
算数力が弱い自分では、全く歯が立ちそうにありません。
どなたか、挑戦してください!
二乗して前半と後半の数字を足すと元の数に戻る
おまけ
整数 297 を考えます。
この数値を
二乗して、前方2桁、後方3桁の和をとってみます。
二乗 88209
前方 2桁 88
後方 3桁 209
和 297
また、びっくり!
元の数値に戻りました。
一般的な操作方法として記述すると、
整数を二乗してできた数値に於いて
2n桁の場合(偶数桁) 前方n桁と後方n桁の和
2n+1桁の場合(奇数桁) 前方n桁と後方n+1桁の和
が、元の整数と等しくなるもの
を「
カプレカ数(Kaprecar numbers)」と定義します。
このような整数には、
1, 9, 45, 55, 99, 297, 703, 999, 2223・・・
があるそうです。
数式を設定してみます。
たしかに、元の整数に戻ります。
では、これより先にどのように分布しているのでしょうか?
VBAで調べてみましょう。
3千万まで調べてみると、ところどころで、ポコンと飛んでいるのが分かります。
(算数力が弱いので、何故かは、もちろん分かりません!)
グラフ(片対数)を作ってみると
確かに指数関数に似た形式で、ところどころに階段があります。
が、これが何を意味するのか?
さっぱり、わかりません!
使用したVBAコード
Dim 中止 As Boolean
Private Sub cmdGo2_Click()
'
' カプレカ数2を求める
'
Dim n As Long, n2 As Currency
Dim nl As Long, nr As Long
Dim r As Integer, c As Integer
Dim Ln As Integer
Dim i As Integer
中止 = False
r = 0: c = 1
n = 45
Range(Range("RESULT2"), Range("RESULT2").End(xlDown)).ClearContents
Do
n2 = CCur(n) * CCur(n)
Ln = Len(CStr(n2))
nl = Val(Left(CStr(n2), Int(Ln / 2)))
nr = Val(Right(CStr(n2), CInt(Ln / 2)))
If n = (nl + nr) Then
r = r + 1
If r > 20 Then
r = 1
c = c + 1
End If
Range("RESULT2").Cells(r, c) = n
End If
n = n + 1
If n Mod 100000 = 0 Then
Range("COUNTER2").Value = n
DoEvents
End If
Loop While (Not 中止) And (n <= 3 * 10 ^ 7)
End Sub
Private Sub cmdStop2_Click()
中止 = True
End Sub
他の基数
考えてみれば、カプレカ定数もカプレカ数も10進数として考えています。
そもそも、10進数自体にたいした意味はありません。
(人間の指の数が10本だから10進数を採用しているだけで、算数的には2進数、7進数、16進数、どれを採用しても構わないはずです。)
下図は16進数で試したものです。
7F8 で収束していますね。
16進数での3桁のカプレカ数は7F8(10進換算では2040)であることがわかります。
3桁で他にあるかは未検証。
4〜7桁で試した限りでは、一つの数値に収束せずループになりました。
(黄色の部分で同じ数字が出現)
なかなか、奥が深いです。
奇数:3n+1、偶数:2で割る→{1,4,2}のループ
ある数値が奇数であれば3倍して1を足す、偶数であれば2で割ります。
この操作を続けると、必ず1になります。
(その後、4,2,1を繰り返す)
9から始めると19ステップ、41からでは109ステップを要する!
この予想の証明はまだされていませんが、この問題は多くの数学者が直感的に正しいと考えています。
現在、 3 × 253 = 27,021,597,764,222,976
までチェックされているそうです。
固有名詞を冠しない「
3n+1問題」という呼び方もあります。
28から始めると下の表のようになり、
4,2,1のループとなる
|
|
1〜30までの数字で開始したチャート
いずれも、4,2,1のループになる
|
|
|
|
数学者
ポール・エルデシュは「数学はまだこの種の問題に対する用意ができていない」と述べ、解決した人に500ドルを提供すると申し出ました。
(ステキな金額ですね!−私がスポンサーに替わってもいい!)
1960年代に数学者の
角谷静夫先生も興味を持たれて、イェール大学の同僚に伝えたところ、イェールの数学教室では一ヶ月くらいの間皆がこの問題に嵌ってし
まったそうです。
他の大学でも同じような現象が起こり、一時期流行ったゲーム
「テトリス」のように「
米国の数学研究
を鈍らせるための某国(ソ連?)の陰謀」だったのではな いかという笑い話もあったそうです。
( 「確率論とその応用」 白井朋之 氏 より)
−工事中−