UVA10104 Exgcd(裴蜀定理)
UVA10104 Euclid Problem
非常 template 的一道题。
给定 \(a, b\),令 \(d \gets \gcd(a, b)\),求 \(|x| + |y|\) 最小的 \(x, y\) 满足 \(ax + by = d\)。
关于 exgcd 也没什么好讲的,自行了解。
这里补充一下 裴蜀定理 的证明。
裴蜀定理:\(\forall a, b \in \mathbb Z ~~ \exists x, y \in \mathbb Z ~~ \text{s.t.} ~~ ax + by = \gcd(a, b)\)。
证明:
若 \(a = b = 0\) 显然有解。
若 \(a = 0\) 或 \(b = 0\) 则 \(\gcd(a, b) = a\),取 \(x = 1, y = 0\)。
\(\because \gcd(a, b) = \gcd(a, -b)\),可以将 \(a, b\) 都变为正整数,\(a \geq b\),\(d \gets \gcd(a, b)\)。
对
\[ax + by = d \]等式两边同除以 \(d\),得
\[a'x + b'y = 1 \]可知 \(\gcd(a', b') = 1\)。
原命题转为证 \(\gcd(a', b') = 1\) 时 \(\mathbf{a'x + b'y = 1}\)。
辗转相除 \(\gcd\) 步骤为 \(\gcd(a', b') = \gcd(b', a' \bmod b') = \cdots\),将每次传参时后者称为 \(p_1 \sim p_k\),则有
\[\gcd(a', b') = \gcd(b', p_1) = \gcd(p_1, p_2) = \cdots = \gcd(p_{n - 1}, p_n) = 1 \]展开为带余数除法得
\[\begin{aligned} a' &= x_1 b' + p_1 \\ b' &= x_2 p_1 + p_2 \\ p_1 &= x_3 p_2 + p_3 \\ &\ \ \vdots \\ p_{n - 3} &= x_{n - 1} p_{n - 2} + p_{n - 1} & \text{(1)} \\ p_{n - 2} &= x_n p_{n - 1} + p_n & \text{(2)} \\ p_{n - 1} &= x_{n + 1} p_n \end{aligned} \]
设辗转相除 \(\gcd\) 于二者互质时退出,则 \(p_n = 1\) 带入 \(\text{(2)}\) 式得
\[\begin{aligned} p_{n - 2} &= x_n p_{n - 1} + 1 \\ p_{n - 2} - x_n p_{n - 1} &= 1 & \text{(3)} \end{aligned} \]
再由 \(\text{(1)}\) 式移项
\[p_{n - 1} = p_{n - 3} - x_{n - 1} p_{n - 2} \]代入 \(\text{(3)}\) 式后得
\[(x_n x_{n - 1} + 1) p_{n - 2} - x_n p_{n - 3} = 1 \]同理代入 \(p_{n - 2} \cdots p_1\),最后得 \(a'x + b'y = 1\)。\(\square\)