§A4.5合同式の計算

最終更新

整数a,ba, bが法mm(正の整数)について合同である(a≡b(modm)a \equiv b \pmod{m})とは、m∣(a−b)m \mid (a - b)が成り立つことです。 「mmで割った余りが等しい」と言い換えても同じで、以降は余りの世界での四則演算を考えます。

1 同値関係であること

≡\equivは同値関係です。反射律はm∣0m \mid 0から、対称律はm∣(a−b)m\mid(a-b)ならm∣(b−a)m\mid(b-a)から、推移律はm∣(a−b)m\mid(a-b)とm∣(b−c)m\mid(b-c)の和がm∣(a−c)m\mid(a-c)になることから、それぞれ一瞬で確かめられます。だから整数全体は法mmごとにmm個の類(0,1,…,m−10,1,\dots,m-1の余りのグループ)へきれいに分割されます。

2 和・差・積は代表の取り方によらない

問題は、この分割の上で四則演算を「代表を選んで計算する」形で定義してよいか、です。a≡a′a \equiv a',b≡b′(modm)b \equiv b' \pmod mのとき、

ab−a′b′=a(b−b′)+b′(a−a′)ab - a'b' = a(b - b') + b'(a - a')

と分解すると、右辺の2項はどちらもmmの倍数(仮定よりm∣(b−b′)m \mid (b-b'),m∣(a−a′)m\mid(a-a'))なので、左辺もmmの倍数、つまりab≡a′b′(modm)ab \equiv a'b' \pmod m。和・差も同様の分解で示せます。「別の代表を選んでも答えが変わらない」という、well-defined 性の確認そのものです(基礎解析の well-definedness の記事と全く同じ構造の議論です)。だから「a(modm)a \pmod mの値だけ見て計算してよい」という、合同式の四則演算が正当化されます。

3 割り算はできるとは限らない

ところが割り算は同じようにいきません。たとえば

2×3≡2×8(mod10)2 \times 3 \equiv 2 \times 8 \pmod{10}

(66と1616はどちらも1010で割ると余り66)は成り立ちますが、両辺を22で割った3≡8(mod10)3 \equiv 8 \pmod{10}は成り立ちません(3≢83 \not\equiv 8)。

ca≡cb(modm)ca \equiv cb \pmod mからa≡b(modm)a \equiv b \pmod mを結論してよいのは、gcd⁡(c,m)=1\gcd(c, m) = 1のときに限られます。理由は、m∣c(a−b)m \mid c(a-b)のとき、ccとmmが互いに素ならmmの素因数はすべて(a−b)(a-b)の側に落ちるしかなく、m∣(a−b)m \mid (a-b)が出るからです(先の例ではgcd⁡(2,10)=2≠1\gcd(2,10)=2 \ne 1なので割り算が壊れます)。合同式で割り算をする前には、必ず割る数と法が互いに素かを確認する癖をつけてください。

4 べき乗の計算:余りは周期的に繰り返す

a1,a2,a3,…(modm)a^1, a^2, a^3, \dots \pmod mの列は、有限個の値しか取れないので、いずれ周期的に繰り返します。71007^{100}の一の位( mod 10\bmod 10)を求めてみます。

71≡7,72≡9,73≡3,74≡1(mod10)7^1 \equiv 7,\quad 7^2 \equiv 9,\quad 7^3 \equiv 3,\quad 7^4 \equiv 1 \pmod{10}

で周期44に戻ってきます。100=4×25100 = 4 \times 25なので7100≡(74)25≡125≡1(mod10)7^{100} \equiv (7^4)^{25} \equiv 1^{25} \equiv 1 \pmod{10}——一の位は11です。指数がどれだけ大きくても、周期さえ見つければ一瞬で終わります。

5 曜日の計算

曜日は法77の合同式そのものです。今日を日曜日(00)とすると、nn日後の曜日はn mod 7n \bmod 7が00なら日曜、11なら月曜、……と決まります。たとえば100100日後は100=7×14+2100 = 7 \times 14 + 2なので、22日後と同じ曜日、つまり火曜日です。日数がどれだけ先でも、77で割った余りだけ見ればよいのが合同式の威力です。

閑話休題:チェックディジットという打鍵ミス検出装置 ISBN-13 やクレジットカード番号の最後の1桁(チェックディジット)は、合同式で打鍵ミスを検出する仕組みです。ISBN-13 は、各桁に1,3,1,3,…1, 3, 1, 3, \dotsの重みを掛けた和が1010で割り切れるように最後の桁を決めます。クレジットカード番号のルーン・アルゴリズムも、1桁おきに桁を2倍して(99を超えたら99引く)足し合わせた総和が mod 10\bmod 10で00になるように作られています。

1桁だけ打ち間違えたときは、重みw∈{1,3}w \in \{1, 3\}はどちらも1010と互いに素なので、w(a−a′)≡0(mod10)w(a - a') \equiv 0 \pmod{10}はa=a′a = a'(00–99の範囲では)を強制し、必ず検出されます。ところが隣接する2桁の入れ替えは話が別です。重み1,31, 3の桁を入れ替えると、和の変化は2(a−b)2(a - b)型になり、これが1010で割り切れる(=検出されない)のはa−b≡0(mod5)a - b \equiv 0 \pmod 5、つまり2桁の差がちょうど55(00と55、11と66、……)のときです。ここでもgcd⁡(2,10)=2≠1\gcd(2, 10) = 2 \ne 1が原因で、先ほどの「割り算ができない」現象と同じ穴が空いています。一方、古い ISBN-10 は法を素数1111にとっていました。隣接入れ替えで生じる差もやはりある倍数k(a−b)k(a-b)の形になりますが、1111が素数でkkが1111の倍数でない限りk(a−b)≡0(mod11)k(a-b)\equiv 0\pmod{11}は00–99の範囲でa=ba=bしか許さず、隣接入れ替えもすべて検出できました。法を「1010」にするか「1111」にするかは、扱いやすさと検出力のトレードオフだったわけです。

例題

条件と何を求めるかを確認してから、式と答えの対応を見比べてください。

次の合同式の値を求めよ(法より小さい非負の整数で答えること)。

解法の型位数(ak≡1a^k \equiv 1 となる最小の kk)を求め、指数を位数で割った余りに落とす

  1. 例題 1

    457(mod13)4^{57} \pmod{13}
  2. 例題 2

    783(mod11)7^{83} \pmod{11}
  3. 例題 3

    555(mod7)5^{55} \pmod{7}
  4. 例題 4

    256(mod13)2^{56} \pmod{13}
  5. 例題 5

    682(mod11)6^{82} \pmod{11}
  6. 例題 6

    344(mod13)3^{44} \pmod{13}
  7. 例題 7

    872(mod7)8^{72} \pmod{7}
  8. 例題 8

    870(mod13)8^{70} \pmod{13}
  9. 例題 9

    266(mod7)2^{66} \pmod{7}
  10. 例題 10

    469(mod11)4^{69} \pmod{11}

演習

問題を解いてから「解答・解説」を開けます。

次の合同式の値を求めよ(法より小さい非負の整数で答えること)。

演習を読み込み中…

前提記事