TOP > 数学 拡張ユークリッドの互除法(Extended-Euclidean-Algorithm) 2019/04/05 • ei1333 説明 $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; } 検証 AOJ NTL_1_E 拡張ユークリッドの互除法 #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; }