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

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

2 つの整数 aa、bb に対して、次の式を満たす整数 xx、yy を求めます。

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

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

例

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

使いどころ

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

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

注意

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