裴蜀定理和欧几里得

裴蜀定理:

表述:ax + by = gcd(a, b) ,方程组一定有一组整数解

证明:

裴蜀定理

表述:\(ax+by=\gcd(a,b)\) 必有整数解

证明

\[\begin{cases} ax+by=\gcd(a,b)=d \quad (1)\\ ax_0+by_0=s \quad (s为最小正线性组合) \quad (2) \end{cases} \]

只需证 \(s=d\),即证 \(s\mid d,\ d\mid s\)

  1. \(d\mid s\)

\[\begin{aligned} ax_0+by_0&=s\\ d\cdot\frac{a}{d}x_0+d\cdot\frac{b}{d}y_0&=s\\ d\left(\frac{a}{d}x_0+\frac{b}{d}y_0\right)&=s \end{aligned} \]

\(d\mid s\)

  1. \(s\mid d\)
    \(a=ks+r,\ 0\le r<s\)

\[\begin{aligned} r&=a-k(ax_0+by_0)\\ &=a(1-kx_0)+b(-ky_0) \end{aligned} \]

\(x_1=1-kx_0,y_1=-ky_0\),则 \(r=ax_1+by_1\)
\(s\) 是最小正组合,故 \(r=0 \Rightarrow s\mid a\),同理 \(s\mid b\)
\(s\)\(a,b\) 公因子,故 \(s\mid d\)

结论:\(d\mid s,\ s\mid d \implies s=d\)
推论:\(ax+by=\gcd(a,b)\cdot n\) 存在整数解(充要条件)
Tips:

  • 判断二元线性方程有无解;\(a,b\) 取绝对值求 \(\gcd\)
  • \(ax+by=z\) 的最小正 \(z\)\(\gcd(a,b)\)

扩展欧几里得

用于求解 \(ax+by=\gcd(a,b)\) 的一组特解

推论:ax + by = gcd(a, b) * n,一定有整数解 (充要条件)

tips:

  • 裴蜀定理一般用于判断线性方程组是否有解,a,b可能存在负数,求gcd的时候要带入绝对值。
  • d 为 ax + by = z ,z最小就是 d。

扩展欧几里得:

扩欧用于求 ax + by = gcd(a, b) ,的特解,过程如下:

扩展欧几里得推导

目标:求解 \(ax+by=\gcd(a,b)\)

  1. 边界 \(b=0\)
    \(ax=a\),特解:

\[\begin{cases} x=1\\ y=0 \end{cases} \]

  1. 递归 \(b\neq0\)
    由欧几里得 \(\gcd(a,b)=\gcd(b,a\bmod b)\)

\[\begin{aligned} \gcd(a,b)&=ax_0+by_0 \quad (1)\\ \gcd(b,a\bmod b)&=bx_1+(a-\lfloor\frac{a}{b}\rfloor b)y_1\\ &=ay_1 + b\left(x_1-\lfloor\frac{a}{b}\rfloor y_1\right) \quad (2) \end{aligned} \]

联立 \((1)(2)\) 得递推式:

\[\begin{cases} x_0=y_1\\ y_0=x_1-\lfloor\frac{a}{b}\rfloor y_1 \end{cases} \]

逐层递归,直到余数为0,带回边界解 \(\begin{cases}x=1\\y=0\end{cases}\) 即可得到原方程特解。

code:

ULL exgcd(ULL a, ULL b, ULL &x, ULL &y)
{
    if (b == 0)
    {
        x = 1;
        y = 0;
        return a;
    }
    ULL g = exgcd(b, a % b, y, x);
    y -= a / b * x;
    return g;
}

  • 数论的题很容易溢出,必要时需要开__int128。

通解推导

已知特解 \(ax_0+by_0=\gcd(a,b)\),设通解 \(x=x_0+\Delta x,\ y=y_0+\Delta y\)

\[\begin{aligned} a(x_0+\Delta x)+b(y_0+\Delta y)&=\gcd(a,b)\\ a\Delta x + b\Delta y &= 0 \implies \frac{\Delta x}{\Delta y}=\frac{b}{a} \end{aligned} \]

\(d=\gcd(a,b)\),可取:

\[\Delta x=\frac{b}{d}k,\quad \Delta y=-\frac{a}{d}k \quad(k\in\mathbb{Z}) \]

通解:

\[\begin{cases} x=x_0+\dfrac{b}{\gcd(a,b)}k\\ y=y_0-\dfrac{a}{\gcd(a,b)}k \end{cases} \]

tips:\(ax\) + \(by\) = \(c\)\(c\) = \(k\) * \(gcd(a, b)\),同样还是求 \(a_1\) \(x\) + \(b_{1}\) \(y\) = 1 的特解,\(a_1\) = \(a\) / \(g\), \(b_1\) = \(b\) / \(g\),然后构造特解
求解的过程一般如下:

二元不定方程 \(ax+by=c\) 求解步骤

  1. 扩欧求 \(ax+by=\gcd(a,b)\) 特解 \(x_0,y_0\),记 \(d=\gcd(a,b)\)
  2. 判解:
    • \(d\nmid c\):无解
    • \(d\mid c\):有解
  3. 有解时:
    • 特解:\(x_1=\dfrac{x_0 c}{d},\ y_1=\dfrac{y_0 c}{d}\)
    • 通解:\(\begin{cases} x=x_1+\dfrac{b}{d}k\\ y=y_1-\dfrac{a}{d}k \end{cases}\quad k\in\mathbb{Z}\)
    ULL a1 = a / g, s1 = s / g, x1 = x / g;
    ULL c10, c20;
    exgcd(a1, s1, c10, c20);
    c10 *= x1;
    c20 *= x1;

c10, c20 即为特解。

posted on 2026-06-29 09:57  我不爱吃汉堡  阅读(2)  评论(0)    收藏  举报

导航