ダウンロード

ループ数

ある数値に対して決まった手順の操作を行うと、
元の数値に戻る、または、ある数値の繰り返しになる
数値をループ数とします。

ここでは、いろいろなループ数をみてみます。

見てみるだけで、証明は出来ませんので期待はしないで下さい。
メニュー
カプレカ定数
カプレカ数
カプレカ数−基数を変えてみる

べき乗数字根−構成数字をべき乗した和
階乗数字根−構成数字の階乗した和

ウラム・コラッツのループ

サンプルファイルのダウンロード
リンクリスト

カプレカ定数(Kaprecar constant)

数字を並べ替えて最大値から最小値を引くと元の数に戻る

不思議な数字の現象があります。

ここに、3桁の任意の数字があるとします。
とりあえず、397。

この中の数字を並べ替えて最大の数値と最小の数値を作成します。
 最大:973  最小:379

この差(最大−最小)をとると
 差:594
となります。

この操作を繰り返していきます。

元の数値
最大
最小

397 973 379 594
594 954 459 495
495 954 459 495


あら不思議!
差が495で収束してしまいました。

これは他の3桁の数値から始めても495に収束します。
手計算は面倒なので、エクセルに数式を設定して確認してみましょう。

491

557

おみごと!

ただし、全て同じ数字の場合、1回目で差が0
555

構成する数値の差が1の場合は2回目の操作で0になります。
556



ここで定義

整数の桁を並べ替えて、最大にしたもの から最小にしたものの差を取る。
この操作によって一回目に元の値に等しくなる数を カプレカ定数(Kaprecar's constant) と 定義します。

すなわち、3桁の数値としては上記のように、495があります。
さて、これだけでしょうか?

ここから、エクセルの数式だけでは手に負えないので、VBAを使用します。

カプレカ数1 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桁で試した限りでは、一つの数値に収束せずループになりました。
(黄色の部分で同じ数字が出現)
カプレラ数 16進4桁

なかなか、奥が深いです。

べき乗数字根

数字根とは、ある数値を表す数字を全て足し、結果の数値の数字を全て足し、という操作を繰り返し、最終的に得られる一桁の数字を指します。

 123→1+2+3=6
 789→7+8+9=24→2+4=6

これには、いくつかの面白い性質があります。


ここでは単なる和ではなく、それぞれの数字の平方(二乗)をとり、その和を取ってみます。

この繰り返しを行うと、89,145,42,20,4,16,37,58 または  のループになります。



2乗
べき乗数字根

3乗の場合
べき乗数字根




−工事中−

階乗数字根

数値を構成するそれぞれの数字の階乗をとり、その和を取ります。

この繰り返しで、必ず元の数値になります。

   ( 階乗はFACT関数 )
階乗数字根


−工事中−

ウラム・コラッツのループ

奇数: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のループとなる

ulam-collatz
  
1〜30までの数字で開始したチャート
いずれも、4,2,1のループになる

ulam-collatz-chart




    
数学者ポール・エルデシュは「数学はまだこの種の問題に対する用意ができていない」と述べ、解決した人に500ドルを提供すると申し出ました。
(ステキな金額ですね!−私がスポンサーに替わってもいい!)

1960年代に数学者の角谷静夫先生も興味を持たれて、イェール大学の同僚に伝えたところ、イェールの数学教室では一ヶ月くらいの間皆がこの問題に嵌ってし まったそうです。
他の大学でも同じような現象が起こり、一時期流行ったゲーム「テトリス」のように「米国の数学研究 を鈍らせるための某国(ソ連?)の陰謀」だったのではな いかという笑い話もあったそうです。
( 「確率論とその応用」 白井朋之 氏 より)


−工事中−


×
PageTop