Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Extended Euclidean algorithm

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for poyo poyo
November 24, 2018
200

Extended Euclidean algorithm

Avatar for poyo

poyo

November 24, 2018
Tweet

Transcript

  1. ふつうの互除法をするとおまけで解が手に入る a を b で割った商を q 、余りを r とする。つまり、a =

    bq + r これらを ax + by = 1 に代入して整理すると となる。もとの式と似てる。a := b, b := r, x := qx + y, y := x とおくと a x + b y = g なのでもうほぼ一緒。a を b で割って...として a や b を定めていけ る。b < b だからいつか b = 0 になる。そしてそのときの a が g = gcd(a, b) だった(互除法) b(qx + y) + rx = g 1 1 1 1 1 1 1 1 1 1 i i i+1 i n n
  2. このとき、あきらかに x = 1, y = 0 が解になる i回式変形をしたあとの方程式の解 x

    , y から i − 1回したときの解 x , y を復元?するには とすればいい(割り算は切り捨て)。a や x などはそれぞれ a, x と考 える。もっと正確には q とか r にも添え字を振らないといけない? n n i i i−1 i−1 xi−1 yi−1 = yi = x − qx = x − qy = x − (a /b )y i i−1 i i i i i i 0 0
  3. 実装例 (ruby) def ext_gcd(a, b) if b == 0 [1,

    0, a] else x, y, g = ext_gcd(b, a % b) [y, x - a / b * y, g] end end 初回の関数呼び出しの時点で a < b だとしても a%b = a なので a と b がswapされてちゃんと動く 参考:https://qiita.com/drken/items/b97ff231e43bce50199a#1-3-ユ ークリッドの互除法のプログラム