1 同値関係であること
≡は同値関係です。反射律はm∣0から、対称律はm∣(a−b)ならm∣(b−a)から、推移律はm∣(a−b)とm∣(b−c)の和がm∣(a−c)になることから、それぞれ一瞬で確かめられます。だから整数全体は法mごとにm個の類(0,1,…,m−1の余りのグループ)へきれいに分割されます。
2 和・差・積は代表の取り方によらない
問題は、この分割の上で四則演算を「代表を選んで計算する」形で定義してよいか、です。a≡a′,b≡b′(modm)のとき、
ab−a′b′=a(b−b′)+b′(a−a′)
と分解すると、右辺の2項はどちらもmの倍数(仮定よりm∣(b−b′),m∣(a−a′))なので、左辺もmの倍数、つまりab≡a′b′(modm)。和・差も同様の分解で示せます。「別の代表を選んでも答えが変わらない」という、well-defined 性の確認そのものです(基礎解析の well-definedness の記事と全く同じ構造の議論です)。だから「a(modm)の値だけ見て計算してよい」という、合同式の四則演算が正当化されます。
3 割り算はできるとは限らない
ところが割り算は同じようにいきません。たとえば
2×3≡2×8(mod10)
(6と16はどちらも10で割ると余り6)は成り立ちますが、両辺を2で割った3≡8(mod10)は成り立ちません(3≡8)。
ca≡cb(modm)からa≡b(modm)を結論してよいのは、gcd(c,m)=1のときに限られます。理由は、m∣c(a−b)のとき、cとmが互いに素ならmの素因数はすべて(a−b)の側に落ちるしかなく、m∣(a−b)が出るからです(先の例ではgcd(2,10)=2=1なので割り算が壊れます)。合同式で割り算をする前には、必ず割る数と法が互いに素かを確認する癖をつけてください。
4 べき乗の計算:余りは周期的に繰り返す
a1,a2,a3,…(modm)の列は、有限個の値しか取れないので、いずれ周期的に繰り返します。7100の一の位(mod10)を求めてみます。
71≡7,72≡9,73≡3,74≡1(mod10)
で周期4に戻ってきます。100=4×25なので7100≡(74)25≡125≡1(mod10)——一の位は1です。指数がどれだけ大きくても、周期さえ見つければ一瞬で終わります。
5 曜日の計算
曜日は法7の合同式そのものです。今日を日曜日(0)とすると、n日後の曜日はnmod7が0なら日曜、1なら月曜、……と決まります。たとえば100日後は100=7×14+2なので、2日後と同じ曜日、つまり火曜日です。日数がどれだけ先でも、7で割った余りだけ見ればよいのが合同式の威力です。
閑話休題:チェックディジットという打鍵ミス検出装置 ISBN-13 やクレジットカード番号の最後の1桁(チェックディジット)は、合同式で打鍵ミスを検出する仕組みです。ISBN-13 は、各桁に1,3,1,3,…の重みを掛けた和が10で割り切れるように最後の桁を決めます。クレジットカード番号のルーン・アルゴリズムも、1桁おきに桁を2倍して(9を超えたら9引く)足し合わせた総和がmod10で0になるように作られています。
1桁だけ打ち間違えたときは、重みw∈{1,3}はどちらも10と互いに素なので、w(a−a′)≡0(mod10)はa=a′(0–9の範囲では)を強制し、必ず検出されます。ところが隣接する2桁の入れ替えは話が別です。重み1,3の桁を入れ替えると、和の変化は2(a−b)型になり、これが10で割り切れる(=検出されない)のはa−b≡0(mod5)、つまり2桁の差がちょうど5(0と5、1と6、……)のときです。ここでもgcd(2,10)=2=1が原因で、先ほどの「割り算ができない」現象と同じ穴が空いています。一方、古い ISBN-10 は法を素数11にとっていました。隣接入れ替えで生じる差もやはりある倍数k(a−b)の形になりますが、11が素数でkが11の倍数でない限りk(a−b)≡0(mod11)は0–9の範囲でa=bしか許さず、隣接入れ替えもすべて検出できました。法を「10」にするか「11」にするかは、扱いやすさと検出力のトレードオフだったわけです。