ユークリッドの互除法とは
ユークリッドの互除法とは、2つの整数 $a$ と $b$ $(a>b)$ が与えられたとき、$a$ を $b$ で割った余り $r$ とすることで、$a$ と $b$ の最大公約数を求める方法。除法の原理を利用し、割り算を繰り返すことによって最大公約数を求める。
ユークリッドの互除法のアルゴリズム
入力:整数$a,b$
出力:最大公約数 $d$
- $a_0 = a$, $a_1 = b$
- $a_i=0$のとき,
$d=a_{i-1}$とし終了 - $a_{i-1}=a_iq_i+a_{i+1}$
として2に戻る
プログラム
| |
拡張ユークリッドの互除法とは
拡張ユークリッドの互除法とは、一次不定方程式 $ax+by=d$ の一つの解を求める方法。$a_0=a$、$a_1=b$ とおくと、以下のように求めることができる。
$[\begin{array}{cc} a_{i-1} \ a_i \end{array}]= [\begin{array}{cc} a_iq_i+a_{i+1} \ a_i \end{array}]$ とすると, $[\begin{array}{cc} a_{i-1} \ a_i \end{array}]= [\begin{array}{cc} q_i & 1 \ 1 & 0 \end{array}] [\begin{array}{cc} a_i \ a_{i+1} \end{array}] $ とかける. $[\begin{array}{cc} q_i & 1 \ 1 & 0 \end{array}]$ の逆行列を,$L_i$とする. $[\begin{array}{cc} a_i \ a_{i+1} \end{array}]=L_i [\begin{array}{cc} a_{i-1} \ a_i \end{array}] $ これを繰り返すと, $[\begin{array}{cc} d \ 0 \end{array}]=L_i,\dots,L_2 [\begin{array}{cc} a \ b \end{array}] $ となる.
拡張ユークリッドの互除法のアルゴリズム
入力:整数$a,b$
出力:最大公約数$d$ と $ax+by=d$となる整数$x, y$
- $a_0 =a$, $a_1 =b$
- $x_0 =1$, $x_1 =0$,$y_0 =0$, $y_1 =1$
- $a_i=0$のとき,
$d=a_i−1$,$x=x_{i−1}$,$y=y_{i−1}$とし終了. - $a_{i−1} = a_iq_i + a_{i+1}$により,$a_{i+1}$と$q_i$を定める.
$x_{i+1} = x_{i−1} − q_ix_i$ $y_i+1=y_i−1−q_iy_i$
として3に戻る.
プログラム
| |