同余方程学习笔记

一、裴蜀定理

裴蜀定理(或贝祖定理)得名于法国数学家艾蒂安·裴蜀,说明了对任何整数 \(a,b\) 和它们的最大公约数 \(d\),关于未知数 \(x\)\(y\) 的线性不定方程(称为裴蜀等式):若 \(a,b\) 是整数,且 \(\gcd(a,b)=d\),那么对于任意的整数 \(x,y,ax+by\) 都一定是 \(d\) 的倍数。特别地,一定存在整数 \(x,y\),使 \(ax+by=d\) 成立。
它的一个重要推论是:\(a,b\) 互质的充分必要条件是存在整数 \(x,y\) 使 \(ax+by=1\)

证明:如果 \(\gcd(a,b)>1\) ,两边同时除以 \(\gcd(a,b)\) 即可。

只需考虑 \(\gcd(a,b)=1\) 的情况,那么此时考虑集合 \(A={0,a,2\times a,……,(b-1)\times a}\),共 \(b\) 个数。

\(\exists i,j\in N,0\le i<j\le b-1,i\times a\equiv j\times a\pmod{b}\) ,则 \(b|(j-i)\times a\) ,因为\(\gcd(a,b)=1\),所以\(b|(j-i)\),而\(b<j-i\),所以此情况不成立。

所以 \(A\) 中的 \(b\) 个数 \(\bmod b\) 互不同余,故 \(\exists u\in N, a\times u \equiv 1 \pmod{b}\),则一定 \(\exists v\in N\),满足 \(b\times v+a\times u=1\)。□

二、同余方程的基本求解方法

首先将关于 \(x\) 的同余方程 \(a\times x\equiv c\pmod{b}\),变成一个二元一次不定方程 \(a\times x+b\times y=c\)。然后由于裴蜀定理,我们一定可以求出来一组满足 \(a\times x+b\times y=\gcd(a,b)\) 的解 \(x_0',y_0'\)

然后如果 \(c\)\(\gcd(a,b)\) 的整数倍,那么我们直接将 \(x_0',y_0'\) 乘以 \(\frac{c}{\gcd(a,b)}\) 就可以得到原方程的一组特解 \(x_0,y_0\) 了。否则原方程无解。

接下来就是通解。容易知道是 \(\begin{cases}x=x_0+k\dfrac{a}{\gcd(a,b)}\\y=y_0-k\dfrac{b}{\gcd(a,b)}\end{cases}\)

所以我们的问题就转化为了求方程 \(a\times x+b\times y=\gcd(a,b)\) 的一组特解。

三、exgcd 算法

先给出代码。

inline void exgcd(ll &x,ll &y,ll a,ll b){
    if(!b){x=1;y=0;return;}
    exgcd(y,x,b,a%b);y-=a/b*x;
}

考虑一个让 \(a,b\) 辗转相除的过程。注意 \(a,b\) 会变,但是 \(\gcd(a,b)\) 不变,设为 \(g\)

首先我们递归到底层,\(b=0\),那么此时 \(a=g\),那么我们就知道了一组特解:\(\begin{cases}x=1\\y=0\end{cases}\),因为 \(g\times 1+0\times 0=g\)

然后是回溯,假设我们已经求出方程 \((a\bmod b)\times x+b\times y=g\) 的一组特解 \(\begin{cases}x=x_0\\y=y_0\end{cases}\) 了,那怎么求 \(a\times x+b\times y=g\) 的一组特解呢?

首先 \((a\bmod b)\times x_0+b\times y_0=g\),所以 \((a-b\times\lfloor\frac{a}{b}\rfloor)\times x_0+b\times y_0=g\),所以得到 \(a\times x_0+b\times (y_0-\lfloor\frac{a}{b}\rfloor\times x_0)=g\),所以 \(a\times x+b\times y=g\) 的一组特解是 \(\begin{cases}x=x_0\\y=y_0-\lfloor\frac{a}{b}\rfloor\times x_0\end{cases}\)

然后因为辗转相除,所以每一层到下一层时 \((a,b)\to (b,a\bmod b)\),所以 \((x,y)\to (y,x)\)

然后我们就求出了方程 \(a\times x+b\times y=\gcd(a,b)\) 的一组特解了。时间复杂度 \(O(\log max\{a,b\})\)

四、用途

  1. 求解二元一次不定方程的整数通解

  2. 求解同余方程

  3. 求逆元

    其实就是要求同余方程 \(a\times x\equiv 1\pmod{b}\) 的最小正整数解。

    为什么不用快速幂+费马小定理求呢?因为时间复杂度同样是 \(O(\log b)\) 的情况下,exgcd 的使用没有限制,而用快速幂+费马小定理要求 \(b\) 必须得是质数。

posted @ 2023-05-09 11:01  lrxQwQ  阅读(34)  评论(0编辑  收藏  举报