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;
}

二、应用

(一) 求解二元一次不定方程的特解

  1. 根据裴蜀定理判断无解 对于一个不定方程 \(ax + by = c\) 有解,当且仅当 \(c\)\(\gcd(a,b)\) 的倍数
  2. 求解 \(ax + by = \gcd(a, b)\)
  3. 将求出的解 \(* c / \gcd(a, b)\)
  4. 若求最小正整数解则在 \(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;

(二) 求解同余方程的特解

  1. 对于同余方程 \(ax \equiv c \pmod{b}\) 可以将其变形为 $$ax + by = c \pmod{b}$$
  2. 此时与(一)一致

三、习题

\(Luogu\ P2613\)

思路:

  • 在读入时便将 \(a,b,c\) 取模从而不使用高精度
  • 然后解方程即可

\(code\)

\(Luogu\ P1516\)

思路:

  • 将题目抽象成 \(x + mt = y + nt \pmod{L}\)
  • 将式子化简的 \((m- n)t \equiv y - x \pmod{L}\)
  • 解除最小整数解即可

\(code\)

\(Luogu\ P5656\)

思路:

  • 解方程
  • 求出 \(min_x,min_y\)
  • 推算出 \(max_x,max_y\)
  • 根据周期求出解的情况并输出

\(code\)

\(CF\ 710D\)

思路:

  • 根据题意得 \(a_1k' + a_2l' = b_2 - b_1\)
  • 求出方程特解
  • 根据特解求出通解 \(x = x_0 + tb_1\)
  • 带入区间化简求解

\(code\)

posted @ 2026-02-25 15:31  mouse_boy  阅读(5)  评论(0)    收藏  举报