この話は長崎総合科学大学の藤原豪先生から教わったものです。
藤原先生の「カフェ・プロトマヤ」[ http://www.bas.nias.ac.jp/~cafe/ ]
のお品書きから「魔法数ぐるぐる」もご覧下さい。
n = 142857 という数があります。これを2倍、3倍、・・・、6倍としていくと
n = 142857
2n = 285714
3n = 428571
4n = 571428
5n = 714285
6n = 857142
不思議なことにすべての巡回置換を尽くします。
これらは単なる偶然でしょうか。
さらにもう一つ先をみると
7n = 999999
ここで 「ああ、そうか」 ということになります。
どこかで見た数字だと思ったら
1 / 7 = 0.142857142857142857.......
の循環節でした。すると
つまり
ということになります。
ここでフェルマーの定理
素数 p と、 p の倍数でない整数 k について
は p で割り切れる。
を思い出しましょう。これを
について適用して見ます。いろいろな p について
を調べてみれば、同様に巡回する数が他にも見つかるかも知れません。
次の表は素数 p = 2, 3, 5, 7, 11, 13, 17 について、
を j 倍 ( 1 < j < p ) したものを表したものです。
見やすいように、例えば 142857 は 1 4 2 8 5 7 と、隙間を空けて表示しました。
また、うまく循環したところは、青い色にしました。
k p j jn
10 2 4.5
10 3 1 3 3
10 3 2 6 6
10 3 3 9 9
10 5 1999.8
10 7 1 1 4 2 8 5 7
10 7 2 2 8 5 7 1 4
10 7 3 4 2 8 5 7 1
10 7 4 5 7 1 4 2 8
10 7 5 7 1 4 2 8 5
10 7 6 8 5 7 1 4 2
10 7 7 9 9 9 9 9 9
10 11 1 0 9 0 9 0 9 0 9 0 9
10 11 2 1 8 1 8 1 8 1 8 1 8
10 11 3 2 7 2 7 2 7 2 7 2 7
10 11 4 3 6 3 6 3 6 3 6 3 6
10 11 5 4 5 4 5 4 5 4 5 4 5
10 11 6 5 4 5 4 5 4 5 4 5 4
10 11 7 6 3 6 3 6 3 6 3 6 3
10 11 8 7 2 7 2 7 2 7 2 7 2
10 11 9 8 1 8 1 8 1 8 1 8 1
10 11 10 9 0 9 0 9 0 9 0 9 0
10 11 11 9 9 9 9 9 9 9 9 9 9
10 13 1 0 7 6 9 2 3 0 7 6 9 2 3
10 13 2 1 5 3 8 4 6 1 5 3 8 4 6
10 13 3 2 3 0 7 6 9 2 3 0 7 6 9
10 13 4 3 0 7 6 9 2 3 0 7 6 9 2
10 13 5 3 8 4 6 1 5 3 8 4 6 1 5
10 13 6 4 6 1 5 3 8 4 6 1 5 3 8
10 13 7 5 3 8 4 6 1 5 3 8 4 6 1
10 13 8 6 1 5 3 8 4 6 1 5 3 8 4
10 13 9 6 9 2 3 0 7 6 9 2 3 0 7
10 13 10 7 6 9 2 3 0 7 6 9 2 3 0
10 13 11 8 4 6 1 5 3 8 4 6 1 5 3
10 13 12 9 2 3 0 7 6 9 2 3 0 7 6
10 13 13 9 9 9 9 9 9 9 9 9 9 9 9
10 17 1 0 5 8 8 2 3 5 2 9 4 1 1 7 6 4 7
10 17 2 1 1 7 6 4 7 0 5 8 8 2 3 5 2 9 4
10 17 3 1 7 6 4 7 0 5 8 8 2 3 5 2 9 4 1
10 17 4 2 3 5 2 9 4 1 1 7 6 4 7 0 5 8 8
10 17 5 2 9 4 1 1 7 6 4 7 0 5 8 8 2 3 5
10 17 6 3 5 2 9 4 1 1 7 6 4 7 0 5 8 8 2
10 17 7 4 1 1 7 6 4 7 0 5 8 8 2 3 5 2 9
10 17 8 4 7 0 5 8 8 2 3 5 2 9 4 1 1 7 6
10 17 9 5 2 9 4 1 1 7 6 4 7 0 5 8 8 2 3
10 17 10 5 8 8 2 3 5 2 9 4 1 1 7 6 4 7 0
10 17 11 6 4 7 0 5 8 8 2 3 5 2 9 4 1 1 7
10 17 12 7 0 5 8 8 2 3 5 2 9 4 1 1 7 6 4
10 17 13 7 6 4 7 0 5 8 8 2 3 5 2 9 4 1 1
10 17 14 8 2 3 5 2 9 4 1 1 7 6 4 7 0 5 8
10 17 15 8 8 2 3 5 2 9 4 1 1 7 6 4 7 0 5
10 17 16 9 4 1 1 7 6 4 7 0 5 8 8 2 3 5 2
10 17 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
表1
もう一度表1を眺めてみましょう。
p = 2, 5 では p が 10 の約数だから、考察の対象にならなりません。
p = 11, 13 では短い循環節があって、それが幾つか繰り返されているので、
求めている例ではありませんが、そうかといって「巡回」という性質がまったく
失われてしまったわけでもありません。
循環節の長さを t 、繰り返しの数を s とすると p-1 = st が成り立ち、
p s t
3 2 1
7 1 6
11 5 2
13 2 6
17 1 16
表2
となっています。巡回数であることは s = 1 と同値です。
p = 17 で待望の次の例が見つかりました。なお j = 17 で 9 が並ばず、 0 が並ん
でしまったのは、Visual Basic の限界で、15 桁を超えてオーバーフローしたためです。
さて、これらは 10 進法に依存した結果ですが、フェルマーの定理を思い出すと
他の k 進法でも同様の問題を考えることができます。
長崎総合科学大学の藤原豪先生のホームページでは、10 進法の場合しか触れられて
いません(2003 年 9 月現在)ので、k 進法の場合もここで考察したいと思います。
まず k 進法について簡単に「おさらい」をしておきます。
例えば 5 進法とは、 0, 1, 2, 3, 4 の 5 つの文字だけを使って
数を表す方法です。
1, 2, 3, 4 までは 10 進法と同じですが、次の 5 は 10、
6 は 11 と表されます。
ややこしいので
などと表すこともあります。

ということですから、これは 5 進数を 10 進数に戻す方法を示しています。

逆に 10 進数を 5 進数にするには、5 で割っては余りを拾い、また 5 で
割っては余りを拾い、と繰り返していってそれを逆順に並べればよいのです。
左側に例を示しました。

右をみると、その説明がよくわかります。
以上で 「おさらい」 は終わり。
さて、 k=5 進数の場合で、各素数 p 毎に、
の jn ( 1 < j < p ) を調べてみました。
これを出力したプログラム1を最後のページに掲げておきます。
k p j jn
5 2 1 2
5 2 2 4
5 3 1 1 3
5 3 2 3 1
5 3 3 4 4
5 5 124.8
5 7 1 0 3 2 4 1 2
5 7 2 1 2 0 3 2 4
5 7 3 2 0 3 2 4 1
5 7 4 2 4 1 2 0 3
5 7 5 3 2 4 1 2 0
5 7 6 4 1 2 0 3 2
5 7 7 4 4 4 4 4 4
5 11 1 0 2 1 1 4 0 2 1 1 4
5 11 2 0 4 2 3 3 0 4 2 3 3
5 11 3 1 1 4 0 2 1 1 4 0 2
5 11 4 1 4 0 2 1 1 4 0 2 1
5 11 5 2 1 1 4 0 2 1 1 4 0
5 11 6 2 3 3 0 4 2 3 3 0 4
5 11 7 3 0 4 2 3 3 0 4 2 3
5 11 8 3 3 0 4 2 3 3 0 4 2
5 11 9 4 0 2 1 1 4 0 2 1 1
5 11 10 4 2 3 3 0 4 2 3 3 0
5 11 11 4 4 4 4 4 4 4 4 4 4
5 13 1 0 1 4 3 0 1 4 3 0 1 4 3
5 13 2 0 3 4 1 0 3 4 1 0 3 4 1
5 13 3 1 0 3 4 1 0 3 4 1 0 3 4
5 13 4 1 2 3 2 1 2 3 2 1 2 3 2
5 13 5 1 4 3 0 1 4 3 0 1 4 3 0
5 13 6 2 1 2 3 2 1 2 3 2 1 2 3
5 13 7 2 3 2 1 2 3 2 1 2 3 2 1
5 13 8 3 0 1 4 3 0 1 4 3 0 1 4
5 13 9 3 2 1 2 3 2 1 2 3 2 1 2
5 13 10 3 4 1 0 3 4 1 0 3 4 1 0
5 13 11 4 1 0 3 4 1 0 3 4 1 0 3
5 13 12 4 3 0 1 4 3 0 1 4 3 0 1
5 13 13 4 4 4 4 4 4 4 4 4 4 4 4
5 17 1 0 1 2 1 3 4 0 2 4 3 2 3 1 0 4 2
5 17 2 0 2 4 3 2 3 1 0 4 2 0 1 2 1 3 4
5 17 3 0 4 2 0 1 2 1 3 4 0 2 4 3 2 3 1
5 17 4 1 0 4 2 0 1 2 1 3 4 0 2 4 3 2 3
5 17 5 1 2 1 3 4 0 2 4 3 2 3 1 0 4 2 0
5 17 6 1 3 4 0 2 4 3 2 3 1 0 4 2 0 1 2
5 17 7 2 0 1 2 1 3 4 0 2 4 3 2 3 1 0 4
5 17 8 2 1 3 4 0 2 4 3 2 3 1 0 4 2 0 1
5 17 9 2 3 1 0 4 2 0 1 2 1 3 4 0 2 4 3
5 17 10 2 4 3 2 3 1 0 4 2 0 1 2 1 3 4 0
5 17 11 3 1 0 4 2 0 1 2 1 3 4 0 2 4 3 2
5 17 12 3 2 3 1 0 4 2 0 1 2 1 3 4 0 2 4
5 17 13 3 4 0 2 4 3 2 3 1 0 4 2 0 1 2 1
5 17 14 4 0 2 4 3 2 3 1 0 4 2 0 1 2 1 3
5 17 15 4 2 0 1 2 1 3 4 0 2 4 3 2 3 1 0
5 17 16 4 3 2 3 1 0 4 2 0 1 2 1 3 4 0 2
5 17 17 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
5 19 1 0 1 1 2 4 2 1 4 1 0 1 1 2 4 2 1 4 1
5 19 2 0 2 3 0 3 4 3 3 2 0 2 3 0 3 4 3 3 2
5 19 3 0 3 4 3 3 2 0 2 3 0 3 4 3 3 2 0 2 3
5 19 4 1 0 1 1 2 4 2 1 4 1 0 1 1 2 4 2 1 4
5 19 5 1 1 2 4 2 1 4 1 0 1 1 2 4 2 1 4 1 0
5 19 6 1 2 4 2 1 4 1 0 1 1 2 4 2 1 4 1 0 1
5 19 7 1 4 1 0 1 1 2 4 2 1 4 1 0 1 1 2 4 2
5 19 8 2 0 2 3 0 3 4 3 3 2 0 2 3 0 3 4 3 3
5 19 9 2 1 4 1 0 1 1 2 4 2 1 4 1 0 1 1 2 4
5 19 10 2 3 0 3 4 3 3 2 0 2 3 0 3 4 3 3 2 0
5 19 11 2 4 2 1 4 1 0 1 1 2 4 2 1 4 1 0 1 1
5 19 12 3 0 3 4 3 3 2 0 2 3 0 3 4 3 3 2 0 2
5 19 13 3 2 0 2 3 0 3 4 3 3 2 0 2 3 0 3 4 3
5 19 14 3 3 2 0 2 3 0 3 4 3 3 2 0 2 3 0 3 4
5 19 15 3 4 3 3 2 0 2 3 0 3 4 3 3 2 0 2 3 0
5 19 16 4 1 0 1 1 2 4 2 1 4 1 0 1 1 2 4 2 1
5 19 17 4 2 1 4 1 0 1 1 2 4 2 1 4 1 0 1 1 2
5 19 18 4 3 3 2 0 2 3 0 3 4 3 3 2 0 2 3 0 3
5 19 19 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
表3
p = 5 の st 表は次の通り。
p s t
2 1 1
3 1 2
7 1 6
11 2 5
13 3 4
17 1 16
19 2 9
表4
p = 2, 3, 7, 17 で巡回数となったことが観察できます。
p = 2 は自明的です。
後は前進あるのみ。ひたすら計算機のキーボードをたたきます。やがて次の表ができます。
たてが p 、横が k 、巡回数となったところに o 印をつけました。
p = 17 では右の方のデータはオーバーフローになって得られていません。
p\k 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
2 o $ o o o o o o
3 o $ o o o o
5 o o o o o o o
7 o $ $ o o
11 o o o o o o
13 o o o o o
17 o $ o o $
表5
k = 10 の二つの $ が表1で得られた結果、 k = 5 の4つの $ が表3で得られた
結果です。
たてに作った表ですが、横によくよく眺めて見ると、 p 毎に周期 p で繰り返しが
あることに気がつきます。もしそうなら、左の p 個ずつについての必要十分条件さえ
見つければ良いということになります。
ここでもう一つ 「おさらい」 をしましょう。
二つの整数 m, n について、 m を p で割った余りと n を p で割った余りが
等しいとき、すなわち m - n が p の倍数のとき、 m と n は p を法として合同
であるといい、 m ≡ n ( mod p ) と表します。
例として、 p = 7 の場合を考えてみましょう。
すべての整数 n は
n = 7s + r ; ( s は整数、0 < r < 6 )
と表すことができますから、 0, 1, 2, 3, 4, 5, 6 のどれかと 7 を法として
合同になります。
. . . . -21 -14 -7 0 7 14 21 . . . .
. . . . -20 -13 -6 1 8 15 22 . . . .
. . . . -19 -12 -5 2 9 16 23 . . . .
. . . . -18 -11 -4 3 10 17 24 . . . .
. . . . -17 -10 -3 4 11 18 25 . . . .
. . . . -16 -9 -2 5 12 19 26 . . . .
. . . . -15 -8 -1 6 13 20 27 . . . .
n と合同になる数の全体を
と表すことにします。すると
とか、
などと、加法と乗法が定義されて分配法則を満たすので、集合

は可換環をなします。7は素数ですから、
を除いた残りの集合

は乗法を演算として群になります。これを素数 p の単数群といいます。
単数群は有限群だから、どの元も何乗かすればいつかは単位元に戻ります。元
について
となる正で最小の t を元
の 位数 といいます。位数は p - 1 に等しいか
またはその約数であることが分っています。
そこで各元の「べき」を求めてみました。数字の上の横棒は省略しました。
p n
3 2 2 1
5 2 2 4 3 1
5 3 3 4 2 1
5 4 4 1
7 2 2 4 1
7 3 3 2 6 4 5 1
7 4 4 2 1
7 5 5 4 6 2 3 1
7 6 6 1
11 2 2 4 8 5 10 9 7 3 6 1
11 3 3 9 5 4 1
11 4 4 5 9 3 1
11 5 5 3 4 9 1
11 6 6 3 7 9 10 5 8 4 2 1
11 7 7 5 2 3 10 4 6 9 8 1
11 8 8 9 6 4 10 3 2 5 7 1
11 9 9 4 3 5 1
11 10 10 1
13 2 2 4 8 3 6 12 11 9 5 10 7 1
13 3 3 9 1
13 4 4 3 12 9 10 1
13 5 5 12 8 1
13 6 6 10 8 9 2 12 7 3 5 4 11 1
13 7 7 10 5 9 11 12 6 3 8 4 2 1
13 8 8 12 5 1
13 9 9 3 1
13 10 10 9 12 3 4 1
13 11 11 4 5 3 7 12 2 9 8 10 6 1
13 12 12 1
17 2 2 4 8 16 15 13 9 1
17 3 3 9 10 13 5 15 11 16 14 8 7 4 12 2 6 1
17 4 4 16 13 1
17 5 5 8 6 13 14 2 10 16 12 9 11 4 3 15 7 1
17 6 6 2 12 4 7 8 14 16 11 15 5 13 10 9 3 1
17 7 7 15 3 4 11 9 12 16 10 2 14 13 6 8 5 1
17 8 8 13 2 16 9 4 15 1
17 9 9 13 15 16 8 4 2 1
17 10 10 15 14 4 6 9 5 16 7 2 3 13 11 8 12 1
17 11 11 2 5 4 10 8 3 16 6 15 12 13 7 9 14 1
17 12 12 8 11 13 3 2 7 16 5 9 6 4 14 15 10 1
17 13 13 16 4 1
17 14 14 9 7 13 12 15 6 16 3 8 10 4 5 2 11 1
17 15 15 4 9 16 2 13 8 1
17 16 16 1
表6
たての各 p について、 横の k の位数が t のとき、 ts = p-1 となる s を
書きこんだのが次の表です。
出力データの表1や表3等から求めた s の値とも完全に一致しています。
したがって、 s = 1 であるところが巡回数です。
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
2 1 1 1 1 1 1 1 1
3 1 2 1 2 1 2 1 2 1 2 1
5 1 1 2 4 1 1 2 4 1 1 2 4 1 1
7 2 1 2 1 3 6 2 1 2 1 3 6 2 1 2
11 1 2 2 2 1 1 1 2 5 10 1 2 2 2 1 1
13 1 4 2 3 1 1 3 4 2 1 6 12 1 4 2 3
17 2 1 4 1 1 1 2 2 1 1 1 4 1 2 8 16
19 1 1 2 2 2 6 3 2 1 6 3 1 1 1 2 2 9
23 2 2 2 1 2 1 2 2 1 1 2 2 1 1 2 1 2
表7
残るは 1/p の k 進小数への展開の循環節の長さと、 p を法とした単数群の元
の位数が何故一致するかという説明です。

0 3 2 4 1 2 0 3 をそれぞれ
とすれば、次の式が得られます。始めの3つだけを書き、後は略しましたす。

これを眺めていると、両者が本質的に同じ作業をしていることがわかります。
以上で「巡回」という現象が起こるメカニズムの解明が完了しました。
表1と表3を作った プログラム1と、表6を作ったプログラム2を掲げておきます。
「ホームページ」
へ戻る。
Dim pr(10), c(30) As Integer
Private Sub Command1_Click()
pr(1) = 2: pr(2) = 3: pr(3) = 5: pr(4) = 7: pr(5) = 11
pr(6) = 13: pr(7) = 17: pr(8) = 19: pr(9) = 23
Open "c:\My Documents\guruguru.txt" For Output As #1
k = 10
For n1 = 1 To 7
p = pr(n1)
n = (k ^ (p - 1) - 1) / p
If n - Int(n) Then
Print #1, k; p, n
Print k; p, n: GoTo 100
End If
For k2 = 1 To p
p3 = n * k2
For k1 = 1 To p - 1
p4 = Int(p3 / k)
c(k1) = p3 - p4 * k
p3 = p4
Next k1
Print k; p; k2,
Print #1, k; p; k2,
For k1 = p - 1 To 1 Step -1
Print c(k1);
Print #1, c(k1);
Next k1
Print
Print #1,
Next k2
100
Print
Print #1,
Next n1
Close #1
End Sub
プログラム1
Dim pr(10) As Integer
Private Sub Command1_Click()
pr(1) = 2: pr(2) = 3: pr(3) = 5: pr(4) = 7: pr(5) = 11
pr(6) = 13: pr(7) = 17: pr(8) = 19: pr(9) = 23
Open "c:\My Documents\gennoisuu.txt" For Output As #1
For k = 1 To 7
p = pr(k)
For n = 2 To p - 1
Print p; n,
Print #1, p; n,
m = 1
For n1 = 1 To p - 1
m = m * n
m = m - Int(m / p) * p
Print m;
Print #1, m;
If m = 1 Then Exit For
Next n1
Print
Print #1,
Next n
Print
Print #1,
Next k
Close #1
End Sub
プログラム2
「ホームページ」
へ戻る。