§A4.1整除・余りとユークリッドの互除法

最終更新

整数aaが整数bbを割り切るとは、b=acb = acとなる整数ccが存在することです。このときa∣ba \mid bと書き、aaをbbの約数、bbをaaの倍数と呼びます。4∣124 \mid 12ですが(12=4×312 = 4 \times 3)、5∤125 \nmid 12です(12÷512 \div 5が整数にならない)。

1 整除

整数aaが整数bbを割り切るとは、b=acb=acとなる整数ccが存在することです。このときa∣ba\mid bと書き、aaをbbの約数、bbをaaの倍数と呼びます。

例 1.1.12=4×312=4\times3であるから、4∣124\mid12である。12=5c12=5cを満たす整数ccは存在しないので、5∤125\nmid12である。

命題 1.2.a,b,da,b,dを整数とする。d∣ad\mid aかつd∣bd\mid bならば、任意の整数u,vu,vに対してd∣(ua+vb)d\mid(ua+vb)が成り立つ。

証明.a=dxa=dx、b=dyb=dyを満たす整数x,yx,yを取る。ua+vb=d(ux+vy)ua+vb=d(ux+vy)であり、ux+vyux+vyは整数である。したがってd∣(ua+vb)d\mid(ua+vb)である。▨

2 除法の原理

整数の除法では、余りを00以上、割る数未満に定めます。

定理 2.1. 整数aaと正の整数bbに対し、

a=qb+r,0≤r<ba=qb+r,\qquad 0\le r<b

を満たす整数の組(q,r)(q,r)がただ一組存在する。

証明.

S={a−qb∣q∈Z, a−qb≥0}S=\{a-qb\mid q\in\Z,\ a-qb\ge0\}

と置く。q=−∣a∣q=-|a|とするとa−qb=a+∣a∣b≥0a-qb=a+|a|b\ge0であるから、SSは空でない。SSの各元に11を加えた集合へ§A3.10 定理 2.1の最小数原理を適用し、SSの最小元r=a−qbr=a-qbを取る。r≥br\ge bならば、r−b=a−(q+1)br-b=a-(q+1)bはSSに属し、r−b<rr-b<rである。これはrrの最小性に反する。したがって0≤r<b0\le r<bである。

a=qb+r=q′b+r′a=qb+r=q'b+r'、0≤r,r′<b0\le r,r'<bとすると、b(q−q′)=r′−rb(q-q')=r'-rである。∣r′−r∣<b|r'-r|<bである一方、q≠q′q\ne q'ならば∣b(q−q′)∣≥b|b(q-q')|\ge bとなる。したがってq=q′q=q'であり、r=r′r=r'である。▨

上の定理を除法の原理と呼び、qqを商、rrを余りと呼びます。

例 2.2.−17=(−4)×5+3-17=(-4)\times5+3であり、0≤3<50\le3<5なので、−17-17を55で割った商は−4-4、余りは33である。−17=(−3)×5−2-17=(-3)\times5-2も等式としては正しいが、−2-2は余りの条件を満たさない。

3 最大公約数とユークリッドの互除法

定義 3.1 (最大公約数).a,ba,bを、少なくとも一方が00でない整数とする。a,ba,bの正の公約数のうち最大のものを最大公約数 (greatest common divisor) といい、gcd⁡(a,b)\gcd(a,b)と書く。11は公約数であり、正の公約数はa,ba,bのうち零でない整数の絶対値以下であるから、最大公約数は存在する。

補題 3.2.aaを整数、bbを正の整数とし、q,rq,rをa=qb+ra=qb+r、0≤r<b0\le r<bを満たす整数とする。a,ba,bの公約数とb,rb,rの公約数は一致する。したがって

gcd⁡(a,b)=gcd⁡(b,r)\gcd(a,b)=\gcd(b,r)

が成り立つ。

証明.ddがa,ba,bの公約数ならば、命題 1.2によりd∣(a−qb)=rd\mid(a-qb)=rである。逆に、ddがb,rb,rの公約数ならば、同じ命題によりd∣(qb+r)=ad\mid(qb+r)=aである。したがって公約数が一致し、正の公約数の最大値も一致する。▨

定理 3.3.a,ba,bを、少なくとも一方が00でない整数とし、A=max⁡{∣a∣,∣b∣}A=\max\{|a|,|b|\}、B=min⁡{∣a∣,∣b∣}B=\min\{|a|,|b|\}とする。B=0B=0ならば、gcd⁡(a,b)=A\gcd(a,b)=Aである。B>0B>0ならば、整数の組(A,B)(A,B)から始め、第2成分が正である間、組(x,y)(x,y)を(y,r)(y,r)に置き換える。ただしrrはxxをyyで割った余りである。この手順は有限回で(g,0)(g,0)に到達し、g=gcd⁡(a,b)g=\gcd(a,b)となる。

証明. 整数の符号を変えても約数は変わらず、二数の順序を交換しても公約数は変わらないので、gcd⁡(a,b)=gcd⁡(A,B)\gcd(a,b)=\gcd(A,B)である。B=0B=0のとき、A,0A,0の正の公約数はAAの正の約数であり、その最大値はAAである。

B>0B>0とする。定理 2.1により、各段で余りrrがただ一通りに定まり、0≤r<y0\le r<yである。第2成分の正の整数は、各段で少なくとも11ずつ減少するため、手順は高々BB回で終わる。補題 3.2により各段で最大公約数は変わらない。終了時の組を(g,0)(g,0)とすると、ggは最後の除法で割る数であるからg>0g>0であり、

gcd⁡(a,b)=gcd⁡(A,B)=gcd⁡(g,0)=g\gcd(a,b)=\gcd(A,B)=\gcd(g,0)=g

である。▨

上の定理で述べた手順を、ユークリッドの互除法と呼びます。

例 3.4.10711071と10291029に互除法を適用する。

  1. 1071=1×1029+421071 = 1 \times 1029 + 42
  2. 1029=24×42+211029 = 24 \times 42 + 21
  3. 42=2×21+042 = 2 \times 21 + 0

最後の除法で割る数は2121であるから、定理 3.3によりgcd⁡(1071,1029)=21\gcd(1071,1029)=21である。

1071=3×3×7×171071 = 3 \times 3 \times 7 \times 17、1029=3×731029 = 3 \times 7^3という素因数分解を使わずに、 3回の除法で最大公約数が得られる。

問題 3.5. 正の整数nnに対して、n+1n+1と2n+12n+1の最大公約数を求めよ。

解答.

ddをn+1n+1と2n+12n+1の正の公約数とする。命題 1.2により、ddは2(n+1)−(2n+1)=12(n+1)-(2n+1)=1を割り切る。11の正の約数は11だけなので、d=1d=1である。11は二数の公約数であるから、gcd⁡(n+1,2n+1)=1\gcd(n+1,2n+1)=1である。▨

閑話休題:現役最古のアルゴリズム ユークリッドの互除法は、ユークリッドの『原論』(紀元前300年頃)第7巻に載っている手続きです。計算機科学者ドナルド・クヌースは著書『The Art of Computer Programming』で、互除法を「今なお使われている最古の非自明なアルゴリズム」と呼びました。約2300年前に書かれた手順は、今日も電卓やコンピュータの中で、分数の約分や暗号処理に使われています。

1844年、フランスの数学者ガブリエル・ラメは、互除法の計算回数と入力の大きさの関係を、隣り合うフィボナッチ数を用いて明らかにしました。ラメの結果は、具体的なアルゴリズムの実行時間を数学的に解析した最初期の成果とされ、しばしば「アルゴリズム解析という分野の誕生」の一つに数えられます。たとえば、2121と1313に互除法を適用すると、

21=1×13+8,13=1×8+5,8=1×5+3,5=1×3+2,3=1×2+1,2=2×1+0\begin{aligned} 21&=1\times13+8, &13&=1\times8+5,\\ 8&=1\times5+3, &5&=1\times3+2,\\ 3&=1\times2+1, &2&=2\times1+0 \end{aligned}

となります。この計算では、最後の除法を除いて商が11であり、最後の商は22です。

F1=F2=1F_1=F_2=1、Fn+2=Fn+1+FnF_{n+2}=F_{n+1}+F_n(n≥1n\ge1)によってフィボナッチ数を定めます。正整数A>BA>Bに対して、最後の余り00の除法も含めて互除法がk≥2k\ge2回の除法を要するならば、A≥Fk+2A\ge F_{k+2}、B≥Fk+1B\ge F_{k+1}です。実際、余りをr0=A,r1=B,…,rk>0,rk+1=0r_0=A,r_1=B,\ldots,r_k>0,r_{k+1}=0とし、各除法をri−1=qiri+ri+1r_{i-1}=q_i r_i+r_{i+1}(1≤i≤k1\le i\le k)と書きます。余りは狭義に減少するので、最後の商はqk≥2q_k\ge2、それ以外の商はqi≥1q_i\ge1です。したがって、rk≥1=F2r_k\ge1=F_2、rk−1=qkrk≥2=F3r_{k-1}=q_k r_k\ge2=F_3であり、ri≥ri+1+ri+2r_i\ge r_{i+1}+r_{i+2}(0≤i≤k−20\le i\le k-2)を逆向きに用いる帰納法からri≥Fk−i+2r_i\ge F_{k-i+2}(0≤i≤k0\le i\le k)を得ます。入力を(A,B)=(Fk+2,Fk+1)(A,B)=(F_{k+2},F_{k+1})とすると、最後の商が22、それ以外の商が11となります。このとき互除法はちょうどkk回の除法で停止するので、二つの下界で等号が成立します。上の計算はk=6k=6の場合です。

4 例題

レベル1 — 互除法

次の2数の最大公約数を、ユークリッドの互除法で求めよ。

解法の型大きい方を小さい方で割り、余りで割る……を繰り返す

例 4.1.

gcd⁡(594, 154)\gcd(594,\ 154)

答2222

注意594=3×154+132594 = 3\times 154 + 132から互除法を始める

例 4.2.

gcd⁡(322, 196)\gcd(322,\ 196)

答1414

注意322=1×196+126322 = 1\times 196 + 126から互除法を始める

例 4.3.

gcd⁡(1155, 528)\gcd(1155,\ 528)

答3333

注意1155=2×528+991155 = 2\times 528 + 99から互除法を始める

例 4.4.

gcd⁡(1295, 805)\gcd(1295,\ 805)

答3535

注意1295=1×805+4901295 = 1\times 805 + 490から互除法を始める

例 4.5.

gcd⁡(138, 114)\gcd(138,\ 114)

答66

注意138=1×114+24138 = 1\times 114 + 24から互除法を始める

例 4.6.

gcd⁡(165, 105)\gcd(165,\ 105)

答1515

注意165=1×105+60165 = 1\times 105 + 60から互除法を始める

例 4.7.

gcd⁡(399, 273)\gcd(399,\ 273)

答2121

注意399=1×273+126399 = 1\times 273 + 126から互除法を始める

例 4.8.

gcd⁡(1225, 595)\gcd(1225,\ 595)

答3535

注意1225=2×595+351225 = 2\times 595 + 35から互除法を始める

例 4.9.

gcd⁡(338, 312)\gcd(338,\ 312)

答2626

注意338=1×312+26338 = 1\times 312 + 26から互除法を始める

例 4.10.

gcd⁡(54, 48)\gcd(54,\ 48)

答66

注意54=1×48+654 = 1\times 48 + 6から互除法を始める

5 演習

レベル1 — 互除法

次の2数の最大公約数を、ユークリッドの互除法で求めよ。

解法の型大きい方を小さい方で割り、余りで割る……を繰り返す

問題 5.1.

gcd⁡(60, 54)\gcd(60,\ 54)
解答.

答66

注意60=1×54+660 = 1\times 54 + 6から互除法を始める▨

問題 5.2.

gcd⁡(363, 264)\gcd(363,\ 264)
解答.

答3333

注意363=1×264+99363 = 1\times 264 + 99から互除法を始める▨

問題 5.3.

gcd⁡(294, 231)\gcd(294,\ 231)
解答.

答2121

注意294=1×231+63294 = 1\times 231 + 63から互除法を始める▨

問題 5.4.

gcd⁡(348, 252)\gcd(348,\ 252)
解答.

答1212

注意348=1×252+96348 = 1\times 252 + 96から互除法を始める▨

問題 5.5.

gcd⁡(418, 198)\gcd(418,\ 198)
解答.

答2222

注意418=2×198+22418 = 2\times 198 + 22から互除法を始める▨

問題 5.6.

gcd⁡(54, 42)\gcd(54,\ 42)
解答.

答66

注意54=1×42+1254 = 1\times 42 + 12から互除法を始める▨

問題 5.7.

gcd⁡(204, 108)\gcd(204,\ 108)
解答.

答1212

注意204=1×108+96204 = 1\times 108 + 96から互除法を始める▨

問題 5.8.

gcd⁡(416, 234)\gcd(416,\ 234)
解答.

答2626

注意416=1×234+182416 = 1\times 234 + 182から互除法を始める▨

問題 5.9.

gcd⁡(180, 138)\gcd(180,\ 138)
解答.

答66

注意180=1×138+42180 = 1\times 138 + 42から互除法を始める▨

問題 5.10.

gcd⁡(78, 66)\gcd(78,\ 66)
解答.

答66

注意78=1×66+1278 = 1\times 66 + 12から互除法を始める▨

問題 5.11.

gcd⁡(174, 114)\gcd(174,\ 114)
解答.

答66

注意174=1×114+60174 = 1\times 114 + 60から互除法を始める▨

問題 5.12.

gcd⁡(396, 374)\gcd(396,\ 374)
解答.

答2222

注意396=1×374+22396 = 1\times 374 + 22から互除法を始める▨

問題 5.13.

gcd⁡(468, 182)\gcd(468,\ 182)
解答.

答2626

注意468=2×182+104468 = 2\times 182 + 104から互除法を始める▨

問題 5.14.

gcd⁡(240, 230)\gcd(240,\ 230)
解答.

答1010

注意240=1×230+10240 = 1\times 230 + 10から互除法を始める▨

問題 5.15.

gcd⁡(1221, 858)\gcd(1221,\ 858)
解答.

答3333

注意1221=1×858+3631221 = 1\times 858 + 363から互除法を始める▨

前提記事