【ユークリッドの互除法メニュー】> 【拡張ユークリッドの互除法】STEP: 4 ax + by = c (paizaランク C 相当) [難易度: 1626 ±36]
※リンク先へ移動するためには[paiza]へのログインが必要です。
ユークリッドの互除法の操作を応用させると、一見最大公約数とは関連のなさそうな 2 変数の一次方程式の整数解を求めることができます。
例として、15x + 100y = 10
の整数解 x , y を求めることを考えます。
x , y の係数である 15 , 100 についてユークリッドの互除法の操作を行うと、100 / 15 = 6 余り 10
この式を変形することで、 100 - 6×15 = 10
が得られるので、答えは x = -6 , y = 1
と求まります。
整数 A,B,C が与えられるので、Ax + By = C
の整数解 x , y の値を 1 行で半角スペース区切りで出力してください。
解の組 (x , y) のうち、x または y が 1 であるような解の組の値を出力してください。
ただし、 C = A%B
または C = B%A
であることが保証されています。
入力値(例)
8373 24 21
出力値(例)
1 -348
解答例
1 2 3 4 5 6 7 8 9 10 11 |
<?php list($a, $b, $c) = explode(" ", trim(fgets(STDIN))); if ($a > $b) { printf("%d %d\n", 1, ($c - $a) / $b); }else if ($a < $b) { printf("%d %d\n", ($c - $b) / $a, 1); } return 0; ?> |