遊びの数論59

[遊びの数論] 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40
41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59

遊びの数論58』の続き。誤字脱字・間違いがあるかも。


✿ ✿ ✿ ✿ ✿


2026-05-04 1 ÷ 5 = 0.33333… 非常識は面白い!

なぜ 1/3 = 0.33333… ではシンプルに「3」が反復されるのに、
  1/7 = 0.142857 142857 142857…
は複雑(6桁周期のループ)なのか? 感覚的には 1/3 は簡単な分数だけど 1/7 は複雑だから、という気もする。けど、
  1/11 = 0.090909…
1/7 よりもっと複雑な分数のはずなのに、小数で書くと、比較的シンプルな「09」の反復。

この現象の原因は、「数字の書き方」――あまりに慣れ切ってしまい、普段意識すらしない「10進法」というシステムそのもの――に関連している。例えば、常識的には割り切れるはずの 1/5 = 0.2 は、16進法では
  1/5 = 0.33333… (hex)
という無限小数になるし、複雑に思えた 1/7 は、8進法では
  1/7 = 0.11111… (octal)
となる(あるいは、7進法では 1/7 = 0.1 と割り切れる)。要するに 1/p を N 進法で小数表記するとき、結果が単純か複雑かといったことは、 p という数の選択だけによって決まることではなく、 p と N の相対的な関係によって決まる。その意味で「単純さ・複雑さ」は絶対的なものではない。

とはいえ、もし「循環小数がややこしくなること」を「不便」と考えるなら、10進法は少し不便なシステムで、12進法や16進法などが比較的便利といえるかもしれない(実際、長さの単位などで12進法を使ってる国もあるし、時刻は世界的に12進法・60進法だ)。

✿

このピクニックの予定目的地は、原始根の概念と関連している。

けど今回は、たわいもないお遊びを…

とりあえず16進数で 1 ÷ 5 を計算してみたい。

16進数(hex)で追加される六つの数字
HexABCDEF
10進表記での値101112131415

1 そのものは 5 で割れないので、普通の(10進数バージョンの)筆算と同様に、商として「0.」を立てて「割られる数」の末尾に「0」を付け、 10 を 5 で割ることを考える。

       0. 3
     ┌───────────
   5 │ 0x10
          F

この 10 は、もちろん16進法の「10」つまり 0x10 であり(0x は16進数であることを強調する記号)、10進法の「10の位」の「1」が 10 を意味するように、16進法の「16の位」の「1」は 16 を意味する(0x10 = 16)。よって 5 で割ると商は 3 で 1 余る。 5 × 3 = 15 は16進法では 0xF であり、 0x10 − 0xF = 1。要するに 16 − 15 = 1 だよ、と。

       0. 3
     ┌───────────
   5 │ 0x10
          F
       ────
          1

この余った 1 の末尾に、普通の筆算と同様に「0」を付けると、再び 0x10 を 5 で割る計算に。商に 3 が立って、同じことの繰り返しになる。

       0. 33
     ┌───────────
   5 │ 0x10
          F
       ────
          10
           F
          ──
           1

というわけで、16進数の割り算 1 ÷ 5 = 0x0.33333… は、概念的には別に難しくない。

✿

せっかくなので16進数の 1 ÷ 7 もやってみましょう。

       0. 2
     ┌───────────
   7 │ 0x10
          E
       ────
          2

0x10 = 16 を 7 で割ると、商は 2 で 2 余る。

       0. 24
     ┌───────────
   7 │ 0x10
          E
       ────
          20
          1C
          ──
           4

で 0x20 = 32 を 7 で割ると、商は 4。 7 × 4 = 28 = 0x1C で 4 余る。

       0. 249
     ┌───────────
   7 │ 0x10
          E
       ────
          20
          1C
          ──
           40
           3F
           ──
            1

0x40 = 64 を 7 で割ると、商は 9 で 1 余る。これで最初と同じ「1」に戻ったので、ここからはループで、
  1/7 = 0x0.249 249 249…
となる。

✿

有理数を小数で書くと「循環小数」になることは基本的(有限小数になる場合は、末尾の「0」が循環するとでも解釈すればいい)。実際、「p での割り算」の各ステップを考えれば、「商(0 の場合も含む)が立った後の余り」の末尾に「0」を付けて、再びその数を p で割るのだから、特定のステップでの商(そしてそれ以降での挙動)は、前のステップでの余りのみによって決まる。ところが p で割ったときの余りは 0, 1, 2, ···, p − 1 の p 種類しかないのだから、遅かれ早かれ既出の余りと同じ余りが出て、そこからループが始まる。

特に「余り 0」は「割り切れること」なので、もし割り切れずに無限小数になるのなら、 1, 2, ···, p − 1 の p − 1 種類の余りの一部または全部が、一定の順序でリピートする。余りのバリエーションは p − 1 種類しかないので、「循環の周期」(循環節の長さ)は、最大でも p − 1。

循環の周期が最大になる具体例は、10進数の 1/7

      0.142857
     ┌───────────
   7 │ 10
        7
       ──
        30         [余り 3]
        28
        ──
         20        [余り 2]
         14
         ──
          60       [余り 6]
          56
          ──
           40      [余り 4]
           35
           ──
            50     [余り 5]
            49
            ──
             1     [余り 1]

この筆算を次のように分析することができる:
  1 ÷ 7 は 0 余り 1
  10 ÷ 7 は 1 余り 3
  100 ÷ 7 は 14 余り 2
  1000 ÷ 7 は 142 余り 6
  10000 ÷ 7 は 1428 余り 4
  100000 ÷ 7 は 14285 余り 5
  1000000 ÷ 7 は 142857 余り 1 (振り出しに戻る)

あるいは同じことだが(商を無視して余りだけに注目すると):
  10 ≡ 3 (mod 7)
  102 ≡ 2 (mod 7)
  103 ≡ 6 (mod 7)
  104 ≡ 4 (mod 7)
  105 ≡ 5 (mod 7)
  106 ≡ 1 (mod 7)

mod 7 は「7 で割った余りで分類された世界」なので、 10 と 3 は同類と見なされる。よって、例えば 102 ≡ 2 の代わりに 32 ≡ 2 と書いても、全く同じ意味。

「7 で割って 3 余る数」つまり「7 の倍数より 3 大きい数」は 7k + 3 の形を持つ(k は整数)。そのタイプの数は、何であろうと、平方すれば
  (7k + 3)2 = (7k)2 + 2⋅7k⋅3 + 32 ≡ 9 ≡ 2 (mod 7)
となって、 7 で割ると 2 余る。ここで一つ目の合同記号(≡)において、その左側の第1項 (7k)2 と第2項 2⋅7k⋅3 を無視した。どちらの項も 7 の倍数。 7 で割った余りを考えるのだから、 7 で割り切れる部分は無視していい。

より一般的に、 mod 7 では 10x の代わりに 3x と書いても同じ意味。結局、上記のことは、こう整理される:
  31 ≡ 3, 32 ≡ 2, 33 ≡ 6, 34 ≡ 4, 35 ≡ 5, 36 ≡ 1 (mod 7)

すなわち mod 7 においては、 3 は 6 乗して初めて ≡ 1 になる(0 乗を別にすると)。 ax ≡ 1 (mod p) を満たす最小の正整数 x を mod p における a の位数という。この例では 3 の位数は 6。 mod p におけるある数 a の位数は a の選択によって異なり得るが、上記の理由から、最大でも p − 1。 p が 3 以上の素数のとき、「理論上可能な最大の位数」(つまり位数 p − 1)を持つ a が、実際に一つ以上、存在する。そのような a は mod p の原始根と呼ばれる。

3 は mod 7 の原始根。さらに 10 ≡ 3 (mod 7) なので――つまり 10 と 3 は mod 7 の観点では「同じ」なので―― 10 も mod 7 の原始根。10進法において、 7 で割る計算がややこしく、 1/7 が長い周期の循環小数になる理由は、「10進数」の「10」が 7 の原始根だから。

✿

同じ理由から、 3進数で小数表記した場合も 1/7 の循環節の長さは、可能な最大値(すなわち 6)になる。素朴に考えると「3進数には 0, 1, 2 の 3 種類の桁しかないのだから 3 桁以内に循環が始まるのでは?」と思えるかもしれない。しかし「同じ桁が複数回、出現すること」と「桁のパターンが循環すること」を混同してはいけない。さもないと「10進数には 10 種類の桁しかないので、円周率も 2 も、最大でも10桁以内に循環小数になる」という、ばかげた結論になってしまう!
  π = 3.14159265…
には、確かに最初の小数8桁だけでも 1 や 5 が繰り返し現れるけど、それは「循環小数」とは別問題。

論より証拠、実際に3進数で割り算してみましょう。 7 = 2⋅3 + 1 なので、 7 は3進数では「21」。3進数であることを強調するときは (21)3 のように書くことにする。

      0.0
     ┌───────────
  21 │ 100

1 も 10 も 21 では割れないので、実質的な割り算を始める前に商「0.0」を立てて、割られる数「1」の末尾に「0」を二つ付ける。 (100)3 = 32 = 9 は (21)3 = 7 で割れる: 商が 1、余りが 2。

      0.01
     ┌───────────
  21 │ 100
        21
       ───
         2

最下位桁の 0 から 1 は引けないので、隣(真ん中)の桁から (10)3 = 3 を借りてきて引き算。真ん中も桁も 0 なので、そのまた隣の(最上位)桁から 3 を借りてきて、そのうち 2 をキープして 1 をまた貸し。最上位桁は、全財産を貸してしまったので実質 0。便宜上の表記をすると (023)3 から (21)3 を引くことに当たる。

      0.0102
     ┌───────────
  21 │ 100
        21
       ───
         200
         112
         ───
          11

「20」は 21 で割れないので、商 0 を立てて末尾に 0 を付ける。 (200)3 = 18 を (21)3 = 7 で割ると、商が 2 で余りが 4 = (11)3 に。

      0.010212
     ┌───────────
  21 │ 100
        21
       ───
         200
         112
         ───
          110
           21
          ───
           120
           112
           ───
             1

(110)3 = 12 を (21)3 = 7 で割ると商が 1、余りが 5 = (12)3。最後に (120)3 = 15 を (21)3 = 7 で割ると商が 2、余りが 1。これで振り出しに戻ったので、
  1/7 = (0.010212 010212 010212…)3
を得る。理論通り、周期 6 で循環。

検算 上記の3進小数について、(3進数での)小数第6位までの値を求めると:
  0/3 + 1/32 + 0/33 + 2/34 + 1/35 + 2/36 = 104/729 = 0.142661…
小数第7位以下を切り捨てているので、この値は 1/7 = 0.142857… より少し小さい。(3進数での)小数第6位に 1 を足すなら、分子が 1 増えて
  105/729 = 0.144032…
となるが、この値は 1/7 より少し大きい。つまり上記で得た循環小数は、少なくとも(3進数での)小数第6位まで、全部の桁が正しい。周期 6 の純循環小数なので 6 桁目まで正しければ、完全に正しいはず。まずは一安心。

検算その2 次の方法を使うと、簡潔に直接的な検証ができる。2進数を 4 桁ずつ束ねて16進数にするように、 3進表記された 1/7 を6桁ずつ束ねて「729進法」で表記すると、
  0.δδδ···
の形の(循環周期 1 の)循環小数になる。ここで δ は10進数の 104 に等しい値を表す一つの桁。この循環小数を有理数に変換すると、確かにちょうど 1/7 に等しい。実際、最初の検算を部分的に再利用して、
  y = (0.010212 010212 010212…)3 = 104/729 + 104/7292 + 104/7293 + ···
と置き、両辺を 729 倍して:
  729y = 104 + 104/729 + 104/7292 + 104/7293 + ···
下から上を引いて 728y = 104 を得る。ゆえに:
  y = 104/728 = 1/7

✿

1/7 を「729進法」で表記するってのは、かなり突拍子もない話だが、 3 は mod 7 の原始根ってことと一応関連している。 1/7 の循環小数が複雑、という事実と、本質的には同じ現象が起きている。(続く)

✿ ✿ ✿


<メールアドレス>