TOP > 数学
拡張ユークリッドの互除法(Extended-Euclidean-Algorithm)
説明
$ax+by=\gcd(a,b)$ なる $x,y$ をユークリッドの互除法の過程から計算する.
計算量
- $O(\log N)$
実装例
- extgcd($a$, $b$, $x$, $y$): $a$ と $b$ の最大公約数を返す。 $x, y$ には $ax+by=\gcd(a, b)$ なる $x, y$ が格納される。
template< typename T >
T extgcd(T a, T b, T &x, T &y) {
T d = a;
if(b != 0) {
d = extgcd(b, a % b, y, x);
y -= (a / b) * x;
} else {
x = 1;
y = 0;
}
return d;
}
検証
#define PROBLEM "http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=NTL_1_E"
#include "../../template/template.cpp"
#include "../extgcd.cpp"
int main() {
int a, b, x, y;
cin >> a >> b;
extgcd(a, b, x, y);
cout << x << " " << y << endl;
}