exgcd学习笔记
1.exgcd
exgcd:用于求解形如 \(ax+by=\gcd(a,b)\) 的不定方程(必定有解)
解法:考虑方程
\[\begin{cases}ax+by=\gcd(a,b)\\bx'+(a \bmod b)y=\gcd(b,a \bmod b)\end{cases}
\]
考虑化简
\[\begin{cases}ax+by=\gcd(a,b)\\bx'+(a-\left\lfloor\dfrac{a}{b}\right\rfloor\times b)y=\gcd(b,a \bmod b)\end{cases}
\]
将系数化为a,b
\[\begin{cases}ax+by=\gcd(a,b)\\ay'+b(x'-\left\lfloor\dfrac{a}{b}\right\rfloor\times y)=\gcd(b,a \bmod b)\end{cases}
\]
由欧几里得定理有
\[\gcd(a,b)=gcd(b,a\bmod b)
\]
所以有
\[\begin{cases}x=y'\\y=x'-\left\lfloor\dfrac{a}{b}\right\rfloor\times y'\end{cases}
\]
递归即可
退出条件:b=0
此时有
\[ax=a
\]
\[x=1
\]
y可取任意值(取0即可)
void exgcd(int a,int b,int &x,int &y){
if(!b){x=1;y=0;return;}
exgcd(b,a%b,y,x);
y-=(a/b)*x;
}
2.exgcd应用
1.解同余方程
\[ax\equiv c\pmod{b}
\]
方程相当于
\[ax+by=c
\]
判定无解:
由于 \(ax+by=\gcd(a,b)\) 一定有解
所以方程满足 \(\gcd(a,b)\mid c\) 有解
否则无解
设方程 \(ax+by=\gcd(a,b)\) 的解为 \(x_0,y_0\) (可用exgcd求出), \(d=\dfrac{c}{\gcd(a,b)}\)
则 \(ax+by=c\) 的一组特解为 \(\begin{cases}x^*=d\times x_0\\y^*=d\times y_0\end{cases}\)
方程 \(ax\equiv c\pmod{b}\) 的所有解:共 \(\gcd(a,b)\) 个 为 \(x^*+\dfrac{c}{\gcd(a,b)}\times k(k\in[0,\gcd(a,b)-1])\)
证明我不会
2.求逆元(洛谷P1082)
\[ax\equiv 1\pmod{b}
\]
逆元存在条件为: \(\gcd(a,b)=1\)
显然此时 \(x\) 为 \(a\) 在 \(\bmod b\) 意义下逆元
直接用exgcd求解方程 \(ax+by=1\)即可

浙公网安备 33010602011771号