初等整数論/ユークリッドの互除法

提供: testwiki
ナビゲーションに移動 検索に移動

テンプレート:Nav この項目では、最大公約数を求めるアルゴリズムとその応用について述べる。

ユークリッドの互除法

ユークリッドの互除法とは、ユークリッドが自著「原論」に記した、最大公約数を求めるアルゴリズムである。その根幹を成す定理は、次の定理である。

定理 1.7
自然数 a, b が与えられたとき、除法の原理に基づき a=bq+r とすると、gcd(a,b)=gcd(b,r)

証明
a=bq+r,(a,b)=g(0) とする。すると仮定より、a=ga,b=gb(1) となる。このとき、(a,b)=1(2) である。なぜなら、仮に(a,b)=d>1 とすると、a=da,b=db となってこれを (1) に代入すれば a=gda,b=gdb となり、公約数 gd>g が存在することになってしまい、矛盾するからである。

(0) に (1) を代入して、ga=gbq+rg(abq)=r となり、rg の倍数。したがって、gb,r の公約数。gcd(b,r)=g とすると、定理 1.4 より、g=ge となる。よって gg.(3)

b=gc,r=gr とおけば、これを (0) へ代入して、a=gc+gra=g(c+r) となり、ag の倍数。したがって、ga,b の公約数。したがって定理 1.5 より g=ge となる。すなわち gg. これと (3) によって、g=g. これらの数の定め方から、gcd(a,b)=gcd(b,r).

470 と 364 の最大公約数をユークリッドの互除法を繰り返し用いて求める。

470=3641+106364=1063+46106=462+1446=143+414=43+24=22

よって最大公約数は 2 であることが分かる。ユークリッドの互除法では、余りの数が着実に 1 減っているので、無限降下列を作ることはできないという自然数の性質から、必ず有限回で終わることが分かる。

これを次は、余りを主体にして書きなおしてみる。

a=470,b=364 とおく。

106=ab1(1)46=b1063(2)14=106462(3)4=46143(4)2=1443(5)4=22(6)

(1) を (2) に代入して、46=b(ab1)346=3a+4b これと (1) を (3) に代入して、

14=(ab1)(3a+4b)214=7a9b これと (2) を (4) に代入して、

4=(3a+4b)(7a9b)34=24a+31b これと (3) を (5) に代入して、

2=(7a9b)(24a+31b)32=79a102b

こうして、470, 364 の 最大公約数である 2 を、79470102364=2 と表すことができた。

一次不定方程式

先ほど問題を一般化して、次の不定方程式を満たす数を全て求めるということを考える。

ax+by=c   (a0b0) が解を持つのはどんな場合か、解はどのように求めるか、を考察してゆく。

まずは証明をする前に、次の定理を証明する。

定理 1.8

(a,b)=1 ならば、a,2a,3a,,(b1)a,bab で割った余りは全て異なり、任意の余り r についても、cab で割ると r 余るような c が存在する。

証明
仮に、この中で同じものがあったとして、それらを ia,ja  (ij1i<jb) とおく。これらの余りは等しいのだから、b|iajab|a(ij)となる。定理 1.6 より、b|ij だが、b<ij<b より、 ij=0i=j となり、矛盾。よって定理の前半は満たされ、定理の後半は鳩の巣原理によって難なく証明される。

定理 1.9

(a,b)=g としたとき、ax+by=c が解を持つには、g|c が必要十分条件である。

証明
一次不定方程式が解を持っていて、そのうちの一つを ax+by=c,(a,b)=g とし、a=ga,b=gb とする。ax+by=cgax+gbx=cg(ax+bx)=c より、cg の倍数。よって必要条件である。

次に、g|c であるとする。c=gc とおく。

すると、ax+by=cgax+gbx=gcax+by=c(1) となる。

ここで、a,b は互いに素である。仮に、ax+by=1 が解を持つならば、両辺を c 倍することで (1) も解を持つ。なので ax+by=1 が解を持つことを証明すれば良い。

定理 1.8 より、mab で割ると 1 余るような m が存在する。(※)

すなわち、ma=bn+1am+b(n)=1 となり、解が存在する。

以上より、十分条件であることが証明され、必要十分条件であることが証明された。

ユークリッドの互除法を使って実際に解を構成することで証明することもできる。詳しくは次節を参照。


(※)について : この時点で正であるとしてしまっているが、負の場合もうまく符号操作することで正の場合に帰着することができるので、大した問題にはならない。

解法

さて、定理 1.9 より、全辺を最大公約数で割れば、係数が互いに素な一次不定方程式に持ち込むことができる。ここで ax+by=1(a,b)=1 に解 (x,y)=(m,n) が存在して、am+bn=1 だったとする。ここで、(x,y)=(mbk,n+ak)  (k) も解である。なぜなら、

a(mbk)+b(n+ak)=amabk+bn+abk=am+bn=1

となるからである。

逆に、他の解、(m,n) が存在するとき、(m,n)=(mbk,n+ak) という形で書くことができる。なぜなら、

{am+bn=1(1)am+bn=1(2)

am+bn=am+bna(mm)=b(nn)

したがって、a|b(nn) となるが、(a,b)=1 なので定理 1.6 より、 a|nnak=nnn=n+ak.

さらに、(2) へ代入して am+b(n+ak)=1 となり、これと (1) から、am+bn=am+b(n+ak)am=am+abkm=m+bkm=mbk

以上より、解を全て決定することができた。それらは、ある解(x,y)=(m,n) があったとき、(x,y)=(mbk,n+ak)  (k) が全てである。

つまり、問題は、最初の解 (m,n) をいかにして見つけるか、である。

そこで先ほどのユークリッドの互除法を用いた方法を応用する。まずは例として、248x+105y=1 の解を求める。ユークリッドの互除法を用いて、

248=1052+38105=382+2938=291+929=93+29=24+1

これを余り主体に書き直す。a=248,b=105 とおく。

38=a2b(1)29=b382(2)9=38291(3)2=2993(4)1=924(5)

(1) を (2) に代入して 29=b2(a2b)29=2a+5b、これと (1) を (3) に代入して、9=(a2b)1(2a+5b)9=3a7b、これと (2) を (4) に代入して、2=(2a+5b)3(3a7b)2=11a+26b、これと (3) を (5) に代入して、1=(3a7b)4(11a+26b)47a111b=1

となって、解が求まった。


今度はこれを一般化して考える。互いに素な2数 a,b が与えられたとき、互除法を用いて、

a=bq1+r1r1=bq1a(1)b=r1q2+r2r2=br1q2(2)r1=r2q3+r3r3=r1r2q3rk=rk+1qk+2+11=rkrk+1qk+2


ここで、rk=xka+ykb とおいてみると、

rk2=xk2a+yk2brk1=xk1a+yk1brk=xka+ykb

となり、これらを、rk=rk2rk1qk に代入して、

rk=(xk2a+yk2b)(xk1a+yk1b)qkrk=(xk2xk1qk)a+(yk2yk1qk)b

したがって、 (xk2xk1qk)a+(yk2yk1qk)b=xka+ykb

係数比較(※)して、xk=xk2xk1qk,   yk=yk2yk1qk

初項と第二項は、(1), (2) よりx1=1,  y1=q1,  x2=q2,  y2=1+q1q2

以上の結果をまとめると、

互いに素な二数 a,b について、ax+by=1 の方程式の解は、ユークリッドの互除法によって得られる逐次商 q1,q2,,qk を用いて、

x1=1,  y1=q1,  x2=q2,  y2=1+q1q2
xk=xk2xk1qk,  yk=yk2yk1qk   (k3)

で求められる。

※について : 係数を比較してこの式を導くのではなく、この式が成り立つならば先ほどの式も成り立つのは自明なのでこのように議論を展開しているのである。

テンプレート:Nav