裴蜀定理和欧几里得
裴蜀定理:
表述:ax + by = gcd(a, b) ,方程组一定有一组整数解
证明:
裴蜀定理
表述:\(ax+by=\gcd(a,b)\) 必有整数解
证明
只需证 \(s=d\),即证 \(s\mid d,\ d\mid s\)。
- 证 \(d\mid s\)
得 \(d\mid s\)。
- 证 \(s\mid d\)
设 \(a=ks+r,\ 0\le r<s\):
令 \(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)\)
- 边界 \(b=0\)
\(ax=a\),特解:
- 递归 \(b\neq0\)
由欧几里得 \(\gcd(a,b)=\gcd(b,a\bmod b)\)
联立 \((1)(2)\) 得递推式:
逐层递归,直到余数为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\):
令 \(d=\gcd(a,b)\),可取:
通解:
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\) 求解步骤
- 扩欧求 \(ax+by=\gcd(a,b)\) 特解 \(x_0,y_0\),记 \(d=\gcd(a,b)\)
- 判解:
- \(d\nmid c\):无解
- \(d\mid c\):有解
- 有解时:
- 特解:\(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 即为特解。
浙公网安备 33010602011771号