2026寒来追梦总结
\(Day 1\) 扩展欧几里得
一、扩欧 \((exgcd)\)
用于求解不定方程 \(ax + by = \gcd(a, b)\)
推导过程:
我们对两边同时进行辗转相除可以得到
\[bx_1 + (a \mod b)y_1 = \gcd(b, a \mod b) \]则根据欧几里得定理有
\[bx_1 + (a \mod b)y_1 = ax + by \]可以解得
\[x = y_1, y = x_1 - (a / b) * y_1 \]所以可以使用递归求解
呈现:
ll exgcd(ll a, ll b, ll &x, ll &y) {
if(b == 0) {
return x = 1, y = 0, a;
}
ll x1, y1, ans = exgcd(b, a % b, x1, y1);
return x = y1, y = x1 - y1 * (a / b), ans;
}
二、应用
(一) 求解二元一次不定方程的特解
- 根据裴蜀定理判断无解 对于一个不定方程 \(ax + by = c\) 有解,当且仅当 \(c\) 为 \(\gcd(a,b)\) 的倍数
- 求解 \(ax + by = \gcd(a, b)\)
- 将求出的解 \(* c / \gcd(a, b)\)
- 若求最小正整数解则在 \(a,b / \gcd(a, b)\) 后分别将 \((x,y \mod b,a + b, a) \mod b,a\)
呈现:
d = exgcd(a, b, x, y);
if(c % d) {
cout << "-1\n";
continue;
}
a /= d, b /= d, c /= d;
minx = (x * c % b + b) % b, miny = (y * c % a + a) % a;
(二) 求解同余方程的特解
- 对于同余方程 \(ax \equiv c \pmod{b}\) 可以将其变形为 $$ax + by = c \pmod{b}$$
- 此时与(一)一致
三、习题
\(Luogu\ P2613\)
思路:
- 在读入时便将 \(a,b,c\) 取模从而不使用高精度
- 然后解方程即可
\(Luogu\ P1516\)
思路:
- 将题目抽象成 \(x + mt = y + nt \pmod{L}\)
- 将式子化简的 \((m- n)t \equiv y - x \pmod{L}\)
- 解除最小整数解即可
\(Luogu\ P5656\)
思路:
- 解方程
- 求出 \(min_x,min_y\)
- 推算出 \(max_x,max_y\)
- 根据周期求出解的情况并输出
\(CF\ 710D\)
思路:
- 根据题意得 \(a_1k' + a_2l' = b_2 - b_1\)
- 求出方程特解
- 根据特解求出通解 \(x = x_0 + tb_1\)
- 带入区间化简求解

浙公网安备 33010602011771号