第9章 整数の性質

n進法
─ 10進法だけが数の表し方ではない ── n進法の世界

私たちが普段使う「10進法」は、数の表し方の1つにすぎません。
コンピュータは2進法、色を表すときは16進法。n進法の原理を理解すれば、どんな底の記数法も自在に扱えます。

1n進法の定義と10進法への変換 ─ 各位が $n^k$ を表す仕組み

私たちが普段「345」と書くとき、実はこう考えています。

$$345 = 3 \times 10^2 + 4 \times 10^1 + 5 \times 10^0$$

各位の数字に $10$ のべき乗を掛けて足し合わせる。これが10進法の仕組みです。 「10」を底(基数)と呼びます。 各位の数字は $0$ 以上 $9$ 以下($= 10 - 1$ 以下)の整数です。

では、底を $10$ 以外の数にしたらどうなるでしょうか。 $n$ を2以上の整数とするとき、$n$ ずつまとめて位を繰り上げる方法をn進法といいます。 n進法で表された数をn進数といい、右下に底を添えて $231_{(5)}$ のように表記します。

💡 ここが本質:位取り記数法 ── 各位の数字は $n^k$ の「何個分」

n進法の本質は位取り記数法の原理にあります。 n進数 $a_k a_{k-1} \cdots a_1 a_0{}_{(n)}$ は、次の値を表しています。

$$a_k \times n^k + a_{k-1} \times n^{k-1} + \cdots + a_1 \times n^1 + a_0 \times n^0$$

つまり、右から $i$ 番目の位($0$ から数える)の数字 $a_i$ は、「$n^i$ が $a_i$ 個ある」ことを意味します。

10進法も2進法も16進法も、すべてこの原理で動いています。 底 $n$ が変わっても、「各位 $\times$ 底のべき乗」を足すという仕組みは同じです。

n進数を10進数に変換する

n進数を10進数に直すには、上の定義をそのまま計算するだけです。

▷ 変換の具体例

例1:$231_{(5)}$ を10進数に変換する。

$$231_{(5)} = 2 \times 5^2 + 3 \times 5^1 + 1 \times 5^0 = 50 + 15 + 1 = 66$$

例2:$1101_{(2)}$ を10進数に変換する。

$$1101_{(2)} = 1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 = 8 + 4 + 0 + 1 = 13$$

例3:$2\text{A}3_{(16)}$ を10進数に変換する($\text{A} = 10$)。

$$2\text{A}3_{(16)} = 2 \times 16^2 + 10 \times 16^1 + 3 \times 16^0 = 512 + 160 + 3 = 675$$

⚠️ 落とし穴:$n$ 進法で使える数字は $0$ から $n-1$ まで

✕ 誤:$352_{(5)}$ は5進数として正しい

○ 正:5進法で使える数字は $0, 1, 2, 3, 4$ の5種類。 「5」は使えないので $352_{(5)}$ は正しい5進数ですが、$358_{(5)}$ のように $8$ が現れたら、それは5進数ではありません。

一般に、n進法の各位の数字は $0, 1, 2, \ldots, n-1$ の $n$ 種類です。 $n$ 以上の数字が現れることはありません。

n進法の小数

n進法でも小数を表せます。小数点以下の位は $n^{-1}, n^{-2}, \ldots$ に対応します。

$$0.a_1 a_2 a_3{}_{(n)} = a_1 \times n^{-1} + a_2 \times n^{-2} + a_3 \times n^{-3}$$

たとえば $0.11_{(2)} = 1 \times 2^{-1} + 1 \times 2^{-2} = \dfrac{1}{2} + \dfrac{1}{4} = \dfrac{3}{4} = 0.75$(10進法)です。

🔬 深掘り:なぜ人類は10進法を使うのか

人間の指が10本あることが、10進法の起源と考えられています。 実際、古代バビロニアでは60進法が使われており、その名残は現在の「60秒 = 1分」「60分 = 1時間」「360度」に残っています。

数学的には底が何であっても表現力は同じです。 つまり、どんな正の整数も任意のn進法で表すことができます。 底の選び方は「便利さ」で決まります。

210進法からn進法への変換 ─ 「割り算の余り」を並べる

n進数を10進数に直すのは「定義どおりに計算するだけ」でした。 では逆に、10進数をn進数に直すにはどうすればよいでしょうか。

答えはnで繰り返し割って、余りを記録することです。 なぜこの方法でうまくいくのか、原理から考えてみましょう。

💡 ここが本質:nで割った余りが「その位の数字」

10進数 $N$ をn進法で表したとき、一の位の数字は何でしょうか。

$N = a_k n^k + a_{k-1} n^{k-1} + \cdots + a_1 n + a_0$ と表されるとき、 $N$ を $n$ で割ると

$$N = n \times (a_k n^{k-1} + \cdots + a_1) + a_0$$

つまり、$N \div n$ の余りが一の位 $a_0$商が上位の桁をまとめたものです。

この商をさらに $n$ で割れば、次の余りが $n$ の位 $a_1$ になります。 これを繰り返せば、すべての位の数字が下の桁から順に求まります。

📐 10進数 → n進数の変換手順

手順:10進数 $N$ を $n$ で割り、余りを記録する。商をさらに $n$ で割る。商が $0$ になるまで繰り返す。

記録した余りを最後に出た余りから順に並べる(逆順に読む)。

※ 余りは下の桁から順に出るので、最後の余りが最上位の桁になります。
▷ 変換の具体例:$66$ を5進数に直す

$66 \div 5 = 13$ 余り $\mathbf{1}$(一の位)

$13 \div 5 = 2$ 余り $\mathbf{3}$($5$ の位)

$2 \div 5 = 0$ 余り $\mathbf{2}$($5^2$ の位)

商が $0$ になったので終了。余りを下から上へ読むと:$231_{(5)}$

検算:$2 \times 25 + 3 \times 5 + 1 = 50 + 15 + 1 = 66$ ✓

⚠️ 落とし穴:余りの並べ順を間違える(最頻出ミス!)

✕ 誤:余りを上から下へ(出た順に)並べて $132_{(5)}$ としてしまう

○ 正:余りを下から上へ(逆順に)並べて $231_{(5)}$ が正解

最初に出る余りが一の位(最下位の桁)、最後に出る余りが最上位の桁です。 割り算で最初に出た余りは、n進表記では一番右(最後)に来ると覚えましょう。

不安なときは必ず検算(n進数 → 10進数に戻して元の数と一致するか確認)をしてください。

小数の変換

10進法の小数をn進法に変換するには、整数部分と小数部分を分けて処理します。 小数部分は $n$ を繰り返し掛けて、整数部分を順に取り出します。

▷ 小数の変換例:$0.625$(10進)を2進数に直す

$0.625 \times 2 = \mathbf{1}.25$(整数部分 $1$ を取る → 小数第1位)

$0.25 \times 2 = \mathbf{0}.5$(整数部分 $0$ を取る → 小数第2位)

$0.5 \times 2 = \mathbf{1}.0$(整数部分 $1$ を取る → 小数第3位)

小数部分が $0$ になったので終了。整数部分を上から下へ読む:$0.101_{(2)}$

検算:$1 \times \dfrac{1}{2} + 0 \times \dfrac{1}{4} + 1 \times \dfrac{1}{8} = 0.5 + 0 + 0.125 = 0.625$ ✓

⚠️ 落とし穴:整数部分と小数部分で読む方向が逆

整数部分の変換:余りを下から上へ読む(逆順)

小数部分の変換:整数部分を上から下へ読む(出た順)

方向が逆なので混同しやすいポイントです。 整数部分は「一の位から順に求まる」、小数部分は「小数第1位から順に求まる」と理解すれば混乱しません。

🔬 深掘り:n進法の変換アルゴリズム ── プログラミングとの関係

10進数をn進数に変換するアルゴリズムは、プログラミングの基本です。 Python なら divmod(N, n) を繰り返すだけで実装できます。

実はこのアルゴリズムはユークリッドの互除法と同じ構造をしています。 どちらも「割って余りを取り、商で続ける」という再帰的な手順です。 数学の多くのアルゴリズムが、この「余りを利用する」パターンに基づいています。

3n進法での四則演算 ─ 繰り上がりの法則

10進法での筆算を思い出してください。 一の位どうしを足して $10$ 以上になったら繰り上がりますね。 n進法でも原理は同じで、$n$ 以上になったら繰り上がるだけです。

💡 ここが本質:繰り上がりの基準が $n$ になるだけ

10進法では各位の和が $10$ 以上で繰り上がります。 n進法では各位の和が$n$ 以上で繰り上がります。

引き算では、10進法で上の位から $10$ を借りてきますが、 n進法では$n$ を借りてくるのです。

掛け算・割り算も同様に、「10」の役割を「$n$」に置き換えるだけです。 四則演算の原理は底によらず同じだということです。

加法(足し算)の例

$243_{(5)} + 134_{(5)}$ を計算してみましょう。

▷ 5進法の足し算

一の位:$3 + 4 = 7$。$7 = 1 \times 5 + 2$ なので、$2$ を書いて $1$ 繰り上がり。

$5$ の位:$4 + 3 + 1 = 8$。$8 = 1 \times 5 + 3$ なので、$3$ を書いて $1$ 繰り上がり。

$5^2$ の位:$2 + 1 + 1 = 4$。$4 < 5$ なのでそのまま $4$。

結果:$243_{(5)} + 134_{(5)} = 432_{(5)}$

検算:$243_{(5)} = 73$、$134_{(5)} = 44$、$73 + 44 = 117$。$432_{(5)} = 4 \times 25 + 3 \times 5 + 2 = 117$ ✓

減法(引き算)の例

$432_{(5)} - 243_{(5)}$ を計算します。

▷ 5進法の引き算

一の位:$2 - 3$。引けないので上の位から $5$ を借りる。$7 - 3 = 4$。

$5$ の位:(借りたので $3 - 1 = 2$)$2 - 4$。引けないので上の位から $5$ を借りる。$7 - 4 = 3$。

$5^2$ の位:$4 - 1 = 3$、借りたので $3 - 2 = 1$。

結果:$432_{(5)} - 243_{(5)} = 134_{(5)}$

乗法(掛け算)の例

$23_{(5)} \times 4_{(5)}$ を計算します。

▷ 5進法の掛け算

一の位:$3 \times 4 = 12$。$12 = 2 \times 5 + 2$ なので、$2$ を書いて $2$ 繰り上がり。

$5$ の位:$2 \times 4 + 2 = 10$。$10 = 2 \times 5 + 0$ なので、$0$ を書いて $2$ 繰り上がり。

$5^2$ の位:繰り上がりの $2$。

結果:$23_{(5)} \times 4_{(5)} = 202_{(5)}$

検算:$23_{(5)} = 13$、$4_{(5)} = 4$、$13 \times 4 = 52$。$202_{(5)} = 2 \times 25 + 0 + 2 = 52$ ✓

⚠️ 落とし穴:繰り上がりの基準を10のまま計算してしまう

✕ 誤:5進法の計算で $3 + 4 = 7$ をそのまま「7」と書いてしまう

○ 正:5進法では $5$ 以上で繰り上がるので、$7 = 1 \times 5 + 2$ → 「$2$ を書いて $1$ 繰り上がり」

慣れないうちは、各位の計算結果を10進法で求めてから、nで割って商(繰り上がり)と余り(その位の数字)に分けると間違いにくいです。

42進法・16進法とコンピュータ ─ なぜ10進法を使わないのか

コンピュータの内部では、すべてのデータが2進法で表されています。 なぜ10進法ではなく2進法なのでしょうか?

理由は単純で、コンピュータの回路は電気のON/OFFの2つの状態しか持てないからです。 ON を「1」、OFF を「0」に対応させれば、自然に2進法になります。 この「0」か「1」の1桁をビット(bit)と呼びます。

💡 ここが本質:$2^{10} = 1024 \approx 10^3$ が橋渡しの目安

2進法の桁数と10進法の桁数の関係をつかむのに、$2^{10} = 1024 \approx 1000 = 10^3$ が役立ちます。

たとえば、2進法で10桁あれば $0$ 〜 $1023$ の数が表せます。 これは10進法で約3桁分です。 一般に、2進法の桁数はおよそ10進法の3.3倍($\log_{2}10 \approx 3.32$)になります。

16進法 ── 2進法の「圧縮表記」

2進法は桁数が多くなるため、人間にとっては読みにくいという欠点があります。 そこで16進法がよく使われます。 $16 = 2^4$ なので、2進法の4桁がちょうど16進法の1桁に対応します。

16進法では $0$ 〜 $9$ に加えて $\text{A} = 10$, $\text{B} = 11$, $\text{C} = 12$, $\text{D} = 13$, $\text{E} = 14$, $\text{F} = 15$ を使います。

10進2進16進10進2進16進
000000810008
100011910019
200102101010A
300113111011B
401004121100C
501015131101D
601106141110E
701117151111F

2進数と16進数の相互変換

2進数を16進数に直すには、右から4桁ずつ区切って各グループを16進1桁に変換します。 逆に、16進数を2進数に直すには、各桁を4桁の2進数に展開するだけです。

▷ 2進数 ↔ 16進数の変換例

例:$10101100_{(2)}$ を16進数に直す。

右から4桁ずつ区切る:$\underbrace{1010}_{}\;\underbrace{1100}_{}$

$1010_{(2)} = \text{A}_{(16)}$、$1100_{(2)} = \text{C}_{(16)}$

よって $10101100_{(2)} = \text{AC}_{(16)}$

検算:$\text{A} \times 16 + \text{C} = 10 \times 16 + 12 = 172$。$10101100_{(2)} = 128 + 32 + 8 + 4 = 172$ ✓

🔬 深掘り:カラーコードの正体は16進法

Webページの色指定で見る #FF5733 のような表記は、16進法です。 FF = 赤の強さ($255$)、57 = 緑の強さ($87$)、33 = 青の強さ($51$)を表します。

各色は $00$($= 0$)から $\text{FF}$($= 255$)の範囲、つまり $2^8 = 256$ 段階で指定されます。 これは8ビット($= 2$ 桁の16進数)に対応しています。 色の表現にも、n進法の知識が直結しているのです。

n進法どうしの変換

一般に、n進法からm進法への直接変換は複雑です。 そのため、n進数 → 10進数 → m進数と、10進法を経由して変換するのが確実な方法です。

ただし、$2$ 進法と $8$ 進法($8 = 2^3$)、$2$ 進法と $16$ 進法($16 = 2^4$)のように、 一方の底が他方のべき乗になっている場合は、桁のグループ化で直接変換できます。

5俯瞰マップ ─ n進法と整数の性質のつながり

n進法は「数の表し方」の問題ですが、整数の性質の多くの概念と深くつながっています。 全体像を整理しましょう。

パターン分類表

パターン問題の特徴解法のポイント
A:n進 → 10進n進数が与えられ、10進数を求める各位 $\times n^k$ を計算して足す
B:10進 → n進10進数が与えられ、n進数を求めるnで繰り返し割り、余りを逆順に並べる
C:n進の演算n進数のまま四則演算する繰り上がりの基準をnにする
D:n進 ↔ m進異なる底どうしの変換10進法を経由する(べき乗関係なら直接変換)
E:n進の性質n進表記の桁数・各位の和など$n^k$ の不等式、$n$ で割った余りとの関係

つながりマップ

  • ← 9-1 約数と倍数:n進法の各位の数字は $n$ で割った余りで決まる。余りの概念は約数・倍数と直結している。
  • ← 9-2 ユークリッドの互除法:10進数 → n進数の変換アルゴリズムは、互除法と同じ「割って余りを取る」構造。
  • → 9-8 合同式:n進表記の下1桁は $N \mod n$ に等しい。合同式はn進法での「余りの構造」を一般化したもの。
  • → 情報科学:コンピュータの2進法・16進法は、n進法の最も重要な応用。暗号理論やデータ圧縮でも進法の知識が不可欠。
  • → 数学II 対数:n進法の桁数は対数で求まる。$N$ のn進表記の桁数は $\lfloor \log_n N \rfloor + 1$。

📋まとめ

  • n進法:底 $n$ で位取りする記数法。各位の数字は $0$ 以上 $n-1$ 以下。$a_k a_{k-1} \cdots a_0{}_{(n)} = \sum a_i \cdot n^i$
  • n進 → 10進:各位 $\times n^k$ を計算して足すだけ(定義どおり)
  • 10進 → n進:$n$ で繰り返し割り、余りを下から上へ読む。読む方向を間違えない
  • n進法の演算:繰り上がりの基準が $n$ になるだけ。10進法の筆算と原理は同じ
  • 2進法と16進法:$16 = 2^4$ の関係を利用して、4桁ずつグループ化で相互変換できる
  • n進法の桁数は対数で求まる:$\lfloor \log_n N \rfloor + 1$ 桁

確認テスト

Q1. $342_{(5)}$ を10進数に変換してください。

▶ クリックして解答を表示$3 \times 5^2 + 4 \times 5^1 + 2 \times 5^0 = 75 + 20 + 2 = 97$

Q2. 10進数 $100$ を3進数に変換してください。

▶ クリックして解答を表示$100 \div 3 = 33$ 余り $1$、$33 \div 3 = 11$ 余り $0$、$11 \div 3 = 3$ 余り $2$、$3 \div 3 = 1$ 余り $0$、$1 \div 3 = 0$ 余り $1$。下から読んで $10201_{(3)}$。検算:$81 + 0 + 18 + 0 + 1 = 100$ ✓

Q3. $1011_{(2)} + 110_{(2)}$ を2進法で計算してください。

▶ クリックして解答を表示$1011 + 0110 = 10001_{(2)}$。($1+0=1$, $1+1=10$で$0$書いて繰り上がり$1$, $0+1+1=10$で$0$書いて繰り上がり$1$, $1+0+1=10$で$0$書いて繰り上がり$1$)。検算:$11 + 6 = 17 = 10001_{(2)}$ ✓

Q4. 16進数 $\text{B}2_{(16)}$ を10進数に変換してください。

▶ クリックして解答を表示$\text{B} \times 16 + 2 = 11 \times 16 + 2 = 176 + 2 = 178$

Q5. n進法の各位の数字は、何以上何以下の整数ですか?

▶ クリックして解答を表示$0$ 以上 $n - 1$ 以下の整数。n進法では $n$ 種類の数字を使う。

8入試問題演習

この記事で学んだ内容を、入試形式の問題で確認しましょう。

A 基礎レベル

9-7-1 A 基礎 n進→10進 基本変換

次のn進数を10進数に変換せよ。

(1) $2134_{(5)}$

(2) $110110_{(2)}$

▶ クリックして解答・解説を表示
解答

(1) $294$  (2) $54$

解説

方針:各位 $\times n^k$ を計算して足す。

(1) $2134_{(5)} = 2 \times 5^3 + 1 \times 5^2 + 3 \times 5^1 + 4 \times 5^0 = 250 + 25 + 15 + 4 = 294$

(2) $110110_{(2)} = 1 \times 2^5 + 1 \times 2^4 + 0 \times 2^3 + 1 \times 2^2 + 1 \times 2^1 + 0 \times 2^0 = 32 + 16 + 4 + 2 = 54$

9-7-2 A 基礎 10進→n進 基本変換

10進数 $200$ を次の進法で表せ。

(1) 7進法

(2) 2進法

▶ クリックして解答・解説を表示
解答

(1) $404_{(7)}$  (2) $11001000_{(2)}$

解説

方針:nで繰り返し割り、余りを下から上へ読む。

(1) $200 \div 7 = 28$ 余り $4$、$28 \div 7 = 4$ 余り $0$、$4 \div 7 = 0$ 余り $4$。下から読んで $404_{(7)}$。

検算:$4 \times 49 + 0 \times 7 + 4 = 196 + 4 = 200$ ✓

(2) $200 \div 2 = 100$ 余り $0$、$100 \div 2 = 50$ 余り $0$、$50 \div 2 = 25$ 余り $0$、$25 \div 2 = 12$ 余り $1$、$12 \div 2 = 6$ 余り $0$、$6 \div 2 = 3$ 余り $0$、$3 \div 2 = 1$ 余り $1$、$1 \div 2 = 0$ 余り $1$。下から読んで $11001000_{(2)}$。

検算:$128 + 64 + 8 = 200$ ✓

B 標準レベル

9-7-3 B 標準 n進法 演算

5進法で表された2つの数 $A = 1342_{(5)}$, $B = 243_{(5)}$ について、次を求めよ。

(1) $A + B$ を5進法で表せ。

(2) $A - B$ を5進法で表せ。

(3) $A \times 3_{(5)}$ を5進法で表せ。

▶ クリックして解答・解説を表示
解答

(1) $2140_{(5)}$  (2) $1044_{(5)}$  (3) $10131_{(5)}$

解説

方針:5進法のまま筆算する。繰り上がり・繰り下がりの基準は5。

(1) 一の位:$2 + 3 = 5 = 1 \times 5 + 0$。$0$ を書いて $1$ 繰り上がり。$5$ の位:$4 + 4 + 1 = 9 = 1 \times 5 + 4$。$4$ を書いて $1$ 繰り上がり。$25$ の位:$3 + 2 + 1 = 6 = 1 \times 5 + 1$。$1$ を書いて $1$ 繰り上がり。$125$ の位:$1 + 0 + 1 = 2$。答え:$2140_{(5)}$。

検算:$A = 222$, $B = 73$, $A + B = 295$。$2140_{(5)} = 2 \times 125 + 1 \times 25 + 4 \times 5 + 0 = 295$ ✓

(2) 一の位:$2 - 3$。引けないので上の位から $5$ を借りる。$7 - 3 = 4$。$5$ の位:$(4-1) - 4 = 3 - 4$。引けないので借りる。$8 - 4 = 4$。$25$ の位:$(3-1) - 2 = 0$。$125$ の位:$1$。答え:$1044_{(5)}$。

検算:$222 - 73 = 149$。$1044_{(5)} = 125 + 0 + 20 + 4 = 149$ ✓

(3) 一の位:$2 \times 3 = 6 = 1 \times 5 + 1$。$1$ を書いて $1$ 繰り上がり。$5$ の位:$4 \times 3 + 1 = 13 = 2 \times 5 + 3$。$3$ を書いて $2$ 繰り上がり。$25$ の位:$3 \times 3 + 2 = 11 = 2 \times 5 + 1$。$1$ を書いて $2$ 繰り上がり。$125$ の位:$1 \times 3 + 2 = 5 = 1 \times 5 + 0$。$0$ を書いて $1$ 繰り上がり。答え:$10131_{(5)}$。

検算:$222 \times 3 = 666$。$10131_{(5)} = 625 + 0 + 25 + 15 + 1 = 666$ ✓

採点ポイント
  • 繰り上がり・繰り下がりの処理が正確(各3点)
  • 検算を10進法で行い正しさを確認(1点)

C 発展レベル

9-7-4 C 発展 n進法の桁数 論述

$n$ を2以上の整数とする。正の整数 $N$ をn進法で表したときの桁数を $d$ とする。$d$ を $N$ と $n$ を用いて表せ。

また、$2^{100}$ を10進法で表したときの桁数を求めよ。ただし $\log_{10} 2 = 0.3010$ とする。

▶ クリックして解答・解説を表示
解答

$d = \lfloor \log_n N \rfloor + 1$

$2^{100}$ の桁数:$31$ 桁

解説

方針:n進法で $d$ 桁の数は $n^{d-1} \leq N < n^d$ を満たす。

n進法で $d$ 桁の最小の数は $10\underbrace{0\cdots0}_{d-1}{}_{(n)} = n^{d-1}$、$d$ 桁の最大の数は $(n-1)\underbrace{(n-1)\cdots(n-1)}_{d}{}_{(n)} = n^d - 1$。

よって $n^{d-1} \leq N \leq n^d - 1$、すなわち $n^{d-1} \leq N < n^d$。

各辺の $n$ を底とする対数を取ると:$d - 1 \leq \log_n N < d$

これは $d - 1 = \lfloor \log_n N \rfloor$ を意味するので、$d = \lfloor \log_n N \rfloor + 1$。

$2^{100}$ の10進法での桁数は $\lfloor \log_{10} 2^{100} \rfloor + 1 = \lfloor 100 \times 0.3010 \rfloor + 1 = \lfloor 30.10 \rfloor + 1 = 30 + 1 = 31$ 桁。

採点ポイント
  • $n^{d-1} \leq N < n^d$ の不等式を正しく立てる(3点)
  • 対数を取って $d$ の式を導く(3点)
  • $2^{100}$ の桁数を正しく計算(2点)
  • ガウス記号の理解と使用(2点)