拡張ユークリッドの互除法

ax + by = 最大公約数 を満たす整数 x, y を求めます。互除法で余りを追うときに、その余りが a と b を何倍ずつ含むかも並べて追うと、割り切れた時点で x と y が残ります。一次不定方程式を解く土台になります。

2 つの整数 aabb に対して、次の式を満たす整数 xxyy を求めます。

ax+by=gcd(a,b)ax + by = \gcd(a, b)

このような xxyy が必ず存在することを、ベズーの等式といいます。ふつうの互除法は最大公約数だけを求めますが、途中の余りが aabb を何倍ずつ含むかも並べて追っておくと、割り切れた時点で xxyy が残ります。

a=240a = 240b=46b = 46 とします。最大公約数は 2 で、x=9x = -9y=47y = 47 が求まります。確かめると 240×(9)+46×47=2160+2162=2240 \times (-9) + 46 \times 47 = -2160 + 2162 = 2 になります。

使いどころ

一次不定方程式 ax+by=cax + by = c が整数の解を持つのは、cc が最大公約数の倍数であるときだけです。その解を 1 つ見つけるのに、この計算を使います。

ax1(modm)ax \equiv 1 \pmod{m} を満たす xx、つまり法 mm での逆数を求めるのにも使います。aamm が互いに素なら ax+my=1ax + my = 1 が解けて、その xx が答えです。暗号の計算で使われます。

注意

xxyy の組は一通りではありません。xxbgcd(a,b)\dfrac{b}{\gcd(a, b)} を足し、yy から agcd(a,b)\dfrac{a}{\gcd(a, b)} を引いても等式は成り立ちます。ここでは互除法がそのまま返す組を出します。