ユークリッドの互除法:最大公約数を求める古典的アルゴリズム
ユークリッドの互除法は、繰り返し除算によって二つの整数の最大公約数(GCD)を求める古典的手法です。数論の基礎であり、計算機科学、暗号、代数学で広く用いられます。
ユークリッドの互除法は、二つの整数の最大公約数(GCD)を求めるための、簡明で信頼性の高い手続きである。可能な約数をすべて試す代わりに、二つの数の組をより小さな同値の組へと段階的に置き換え、余りがゼロになるまで計算を続ける。最後に残るゼロでない値が最大公約数となる。
仕組み
このアルゴリズムは、gcd(a, b) = gcd(b, a mod b) という恒等式に基づく。二つの正の整数 a、b(a ≥ b)から始め、余りの一つがゼロになるまで整数除算を繰り返して余りを求める。最後のゼロでない余りが最大公約数である。
- a を b で割り、商 q と余り r を得る:a = bq + r。
- r = 0 なら、gcd(a, b) = b であるため終了する。
- (a, b) を (b, r) に置き換え、手順1から繰り返す。
例:gcd(48, 18) を求める。48 = 18・2 + 12、次に 18 = 12・1 + 6、さらに 12 = 6・2 + 0 となる。したがって最大公約数は 6 である。
画像ギャラリー
3 画像変種、性質と計算量
同じ考え方にはいくつかの形がある。減算に基づく方法では、大きい数を小さい数との差で繰り返し置き換える。二進GCD法(スタインのアルゴリズム)は、シフトと減算だけを用いる。このアルゴリズムは効率的であり、除算の回数は入力値の桁数におおむね応じて増加するため、現代の計算で扱われる大きな整数に対しても高速である。
拡張アルゴリズムと応用
拡張ユークリッドの互除法は、ax + by = gcd(a, b) を満たす整数 x、y を求める。この追加の出力は、一次不定方程式の解法、法に関する逆元の計算、多くの暗号処理に不可欠である。たとえば公開鍵方式でも利用される。繰り返し適用すれば、二つを超える数の最大公約数も求められる。
歴史と意義
この手続きは古代数学にさかのぼり、ユークリッドの『原論』には現代のコードではなく論証として現れる。長く使われ続けてきたことは、その基本的な役割を示している。分数の約分、代数構造における計算、ならびにアルゴリズムや数論的応用における効率的な整数演算を支えている。
著者
AlegsaOnline.com ユークリッドの互除法:最大公約数を求める古典的アルゴリズム Leandro Alegsa
URL: https://ja.alegsaonline.com/art/32464