「学习笔记」联赛数论再学习
原来联赛是考数论的......好像很多的结论没有给证明。
一些定义和结论
剩余类:记模 \(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\).
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 求解同余方程时使用最小非负整数解。