問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
割り算から一次方程式の解を求める方法とユークリッドの互除法を応用させると、整数 A , B を用いた一次方程式 Ax + By = gcd(A, B)
の整数解 x , y を求めることができます。
この x , y を求めるアルゴリズムを拡張ユークリッドの互除法といいます。
拡張ユークリッドの互除法の疑似コードは以下の通りです。
// ax + by = gcd(a,b) の答えを x , y に代入するプログラム
extgcd(a, b, x のポインタ, y のポインタ) {
c = a;
if (b != 0) {
c = extgcd(b, a % b, y, x);
y -= (a / b) * x;
} else {
x = 1;
y = 0;
}
return c;
}
// ax + by = gcd(a,b) を満たす x, y と gcd(a,b) を返すプログラム
ectgcd(a, b) {
if b( != 0) {
c, y, x = extgcd(b, a % b)
y -= (a / b) * x
return c, x, y // 最終的に返される c が gcd(a,b) となる
}
return a, 1, 0
}
Ax + By = gcd(A, B)
の整数解 x , y を求めてください。
A B
x y
Ax + By = gcd(A , B)
の整数解 x , y の値を 1 行で半角スペース区切りで出力してください。・1 ≦ A , B ≦ 100,000
2944 3958
-929 691
2 7
-3 1