§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の場合である。

例題

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

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

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

  1. 例題 1

    gcd⁡(594, 154)\gcd(594,\ 154)
  2. 例題 2

    gcd⁡(322, 196)\gcd(322,\ 196)
  3. 例題 3

    gcd⁡(1155, 528)\gcd(1155,\ 528)
  4. 例題 4

    gcd⁡(1295, 805)\gcd(1295,\ 805)
  5. 例題 5

    gcd⁡(138, 114)\gcd(138,\ 114)
  6. 例題 6

    gcd⁡(165, 105)\gcd(165,\ 105)
  7. 例題 7

    gcd⁡(399, 273)\gcd(399,\ 273)
  8. 例題 8

    gcd⁡(1225, 595)\gcd(1225,\ 595)
  9. 例題 9

    gcd⁡(338, 312)\gcd(338,\ 312)
  10. 例題 10

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

演習

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

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

演習を読み込み中…

前提記事