do_while_true's blog

晚风中闪过 几帧从前啊

0%

「学习笔记」联赛数论再学习

原来联赛是考数论的……好像很多的结论没有给证明。

一些定义和结论

剩余类:记模 $m$ 为 $r$($r\in [0,m)$)的自然数组成的集合为 $k_r$,则 $k_r$ 为模 $m$ 的一个剩余类,任意 $a\bmod m=r$,称 $a$ 为 $k_r$ 的一个代表元。

完系:在每个 $k_r$ 中任取一个代表元为模 $m$ 的一个完系。

缩系/简化剩余系:对于每一个与 $m$ 互质的 $r$,在 $k_r$ 中任取一个代表元为模 $m$ 的一个缩系。若 $x\perp m$,则将 $m$ 的一个缩系中每个数都乘 $x$ 后,仍然为 $m$ 的一个缩系。

裴蜀定理:$ax+by=c,x\in \mathbb{Z}^{*},y\in \mathbb{Z}^{*}$ 有整数解的充要条件是 $\gcd (a,b)|c$

费马小定理:若 $\gcd(a,m)=1$,则 $a^{m-1}\equiv 1\pmod m$

欧拉定理:若 $\gcd(a,m)=1$,则 $a^{\varphi(m)}\equiv 1\pmod m$

扩展欧拉定理:$a^{b}\equiv a^{b \bmod \varphi(m)+\varphi(m)}\pmod m$

Lucas 定理

欧几里得算法(辗转相除法)

Stein算法

当 $a,b$ 均为偶数时:$\gcd(a,b)=2\gcd(a/2,b/2)$;

当 $a$ 为偶数,$b$ 为奇数时:$\gcd(a,b)=\gcd(a/2,b)$;

当 $a$ 为奇数,$b$ 为奇数时:$\gcd(a,b)=\gcd(a-b,b)$.($a>b$)

扩展欧几里得算法(exgcd)

求解下面这个不定方程:

利用裴蜀定理判断有无解,若有解必有 $\gcd(a,b)|c$.

先求解 $ax+by=\gcd(a,b)$

把后面的 $\gcd(a,b)$ 辗转相除一下再写成类似的形式(这里的 $x’,y’$ 是对应 $\gcd(b,a\bmod b)$ 的 $x,y$,和上面的 $x,y$ 没有关系):

因为要求解 $x,y$,所以假设我们已经求解了 $x’,y’$,则要按 $a,b$ 把两个方程分开。

递归求解得到 $x’,y’$ 后,对比系数可得 $x=y’,y=(x’-\left\lfloor \frac{a}{b}\right\rfloor
y’)$。

这样递归就能求出 $ax+by=\gcd(a,b)$ 一组特解了,最后当 $b=0$ 的时候递归终止,此时 $ax+by=\gcd(a,b)$ 的解是 $x=1,y=0$.

1
2
3
4
5
6
void exgcd(int a, int b, int &x, int &y) {
if(!b) { x = 1, y = 0; return ; }
exgcd(b, a % b, x, y);
int nx = y, ny = x - (a / b) * y;
x = nx, y = ny;
}

令 $d=\gcd(a,b)$.

求出 $ax+by=d$ 的一组特解 $ax_0+by_0=d$,则有 $a\frac{x_0c}{d}+b\frac{y_0c}{d}=c$,记作 $ax_1+by_1=c$.

其通解为 $a(x_1+k\frac{b}{\gcd(a,b)})+b(y_1-k\frac{a}{\gcd(a,b)})$.

充要性证明与下面证明扩展中国剩余定理的充要性大致相同,(考虑在数轴上从位于 $d$ 的位置跳)。

扩展中国剩余定理

合并两个一元线性同余方程:

先考虑求出一个特解:有 $a_1+k_1m_1=a_2+k_2m_2$,整理得 $k_1m_1-k_2m_2=a_2-a_1$,用裴蜀定理判断有无解,否则 exgcd 求出一组解 $(p,q)$,则求出同时满足原先两个同余方程的特解 $x_0=pm_1+a_1$ .

然后考虑利用这个特解找到通解的规律:考虑所有满足第一个方程的 $x$,它在与 $x_0$ 的距离是 $m_1$ 的倍数,所有满足第二个方程的 $x$,它与 $x_0$ 的距离是 $m_2$ 的倍数。那么所有同时满足两个方程的 $x$,它与 $x_0$ 的距离既是 $m_1$ 的倍数也是 $m_2$ 的倍数,那么显然满足条件的 $x$ 是与 $x_0$ 距离是 $\mathrm{lcm}(m_1,m_2)$ 的倍数、

即求出与所给两个方程等价的方程:$x\equiv x_0 \pmod {\mathrm{lcm}(m_1,m_2)}$.

为了防止爆精度,exgcd 求解同余方程时使用最小非负整数解。