数论相关
仅作为个人学习笔记使用。
大部分参考:同余理论 by Alex_Wei。
基础知识
费马小定理
模数 \(p\) 为质数。
当 \(p \nmid a\) 时,有 \(xa \not\equiv ya\pmod {p}(1\le x,y<p,x\ne y)\),否则会得到 \(x-y\equiv 0\pmod{p}\),矛盾。
考虑 \(1\sim p-1\) 中的所有数,它们乘 \(a\) 后互不相同且不为 \(0\),所以:
乘法逆元
\(O(\log p)\) 在线逆元
由费马小定理有 \(a^{-1}\equiv a^{p-2} \pmod{p}\),要求 \(p\) 是质数。
还有一种方法是 exgcd。
离线 \(O(1)\) 逆元
要求同时求出 \(n\) 个数 \(a_1\sim a_n\) 的逆元。
求出 \(\prod\limits_{i=1}^{n}a_i\) 的逆元,求 \(a_i\) 逆元时乘上前后缀积即可。
前缀 \(O(n)\) 预处理逆元
增量法,假设 \([0,i-1]\) 逆元已知,求 \(i\) 的逆元。
令 \(p=ki+r(0\le r<i)\),则 \(ki+r\equiv 0 \pmod{p}\)。
两边同时除以 \(ir\) 可得 $i^{-1}\equiv -kr^{-1}\equiv -\left\lfloor \frac{p}{i} \right\rfloor(p\bmod i)^{-1}\pmod{p} $。
在线 \(O(1)\) 逆元
Lagrange 定理
令 \(p\in \mathbb{P}\),对于整系数多项式 \(f(x)=\sum_{i=0}^{n}a_ix^i\),其中 \(p \nmid a_n\),\(x\in \mathbb{Z}_p\),方程至多有 \(n\) 个不同解。
证明可用数学归纳法。
Wilson 定理
一般形式
令 \(p\in \mathbb{P}\)。
\(p>2\) 时,对于方程 \(x^2\equiv 1\pmod{p}\),有且仅有两个解 \(x=1\) 和 \(x=p-1\),于是有 \(\prod\limits_{i=2}^{p-1} i \equiv 1\pmod{p}\)。
所以有 \((p-1)!\equiv -1\pmod{p}\),对于 \(p=2\) 也成立,所以对于所有质数 \(p\) 成立。
\(p\) 不是质数时,根据其因子的讨论可以证明 \((p-1)!\equiv -1\pmod{p}\) 一定不成立。
所以 \((p-1)!\equiv -1\pmod{p}\) 成立当且仅当 \(p\) 为质数。
可以证明,\(2\sim p-2\) 两两配对互为逆元。
扩展形式
考虑 \(p^k\) 以内与 \(p\) 互质的数的乘积模 \(p^k\),记为 \((p^k!)_p\),有:
Kummer 定理
阶乘的质数幂次
记 \(\nu_p(n)\) 为 \(n\) 所包含质因数 \(p\) 的次数,\(s_p(n)\) 为 \(n\) 在 \(p\) 进制下各个数位之和。
有如下结论:
组合数的质数幂次
步长与子环
在长为 \(n\) 的环上每步走 \(k\) 条边,形成 \(d=\gcd(n,k)\) 个子环,每个子环长 \(\frac{n}{d}\)。
当 \(n\perp k\) 时,从任意一点出发可以遍历所有点。
Euler 定理
一般形式
钦定你会了欧拉函数。
对于 \(a\perp n\)。
记 \(K_n\) 表示模 \(n\) 的约化剩余系,大小为 \(\varphi (n)\)。
由类似于费马小定理的证明可以得到:
所以有:
当 \(n\) 为质数时,\(\varphi(n)=n-1\),与费马小定理一致。
扩展形式
\(\gcd(a,n)\ne 1\) 时,不断乘 \(a\) 会使 \(a^i\) 与 \(n\) 的 \(\gcd\) 不断增加,直到某个 \(a^r\) 后不再增加,此时 \(\gcd(a^r,n)\) 的限制由 \(n\) 提供。
二元线性不定方程
exgcd 用于求解形如 \(ax+by=c\) 的二元线性不定方程。
裴蜀定理
我们首先要判定一个方程 \(ax+by=c\) 是否有解。
无论 \(x,y\) 取值如何,左式一定是 \(d=\gcd(a,b)\) 的倍数,\(a,b\) 同时除以 \(d\) 后 \(a\perp b\),容易证明 \(ax\bmod b\) 能够取遍所有 \([0,b-1]\) 中的整数。
所以二元整数线性不定方程 \(ax+by=c\) 有解当且仅当 \(\gcd(a,b)\mid c\)。
扩展 Euclid 算法 exgcd
想要解方程 \(ax+by=c\),令 \(d=\gcd(a,b)\),只需求解 \(ax+by=d\),并将解乘上 \(\frac{c}{d}\) 即可。
对于方程 \(ax+by=d\),可以用类似于辗转相除法求 \(\gcd\) 的方式来缩小问题规模求解。
由于 \(d=\gcd(a,b)=\gcd(b,a\bmod b)\),所以 \(bx+(a\bmod b)y=d\) 有解,令解为 \((x',y')\)。
令 \(x=y',y=x'-\left\lfloor \frac{a}{b} \right\rfloor y'\),即可得到一组解。
求出一组解的时间复杂度为 \(O(\log V)\)。
exgcd 求出特解的范围一般是:\(\left\lvert x\right\rvert \le \left\lvert \frac{b}{2d}\right\rvert,\left\lvert y\right\rvert\le \left\lvert \frac{a}{2d}\right\rvert\)。详见 ycx's blog。
二元线性不定方程的通解形式
首先用 exgcd 找到方程的一组特解 \((x_0,y_0)\)。
由于 \(\Delta(ax) + \Delta(by) = 0\),令 \(\Delta=\left\lvert \Delta(ax) \right\rvert=\left\lvert \Delta(by) \right\rvert\),则 \(a,b\mid \Delta\),即 \(\operatorname{lcm}(a,b)\mid \Delta\),所以有 \(\frac{b}{d}\mid \Delta x\),\(\Delta y\) 同理。
将 \(x\) 增加 \(\frac{b}{d}\),\(y\) 减少 \(\frac{a}{d}\),方程仍成立,所以这个条件是充要的,通解形如:
应用
- 对于同余方程 \(ax\equiv b\pmod{p}\),可以转化为 \(ax+py=b\) 求解;
- 当 \(p\) 不为质数时,求解 \(a\) 的逆元相当于求 \(ax\equiv 1\pmod{p}\) 的解,用上面的方法即可;
线性同余方程组
线性同余方程组是形如以下的方程组:
中国剩余定理(CRT)
中国剩余定理用于求解模数两两互质的线性同余方程组。
令 \(M=\prod_{i=1}^{k}m_i\)。
其核心思想是,对于每个同余方程 \(i\),求出一个解 \(x_i\) 满足 \(x_i \equiv a_i \pmod{m_i}\land x_i \equiv 0 \pmod{m_j}(j\ne i)\),那么 \(\sum\limits_{i=1}^{k} x_i\) 即为整个线性同余方程组的一个解。
那么如何求出 \(x_i\) 呢?首先 \(x_i\) 应为 \(\frac{M}{m_i}\) 的倍数,因为 \(x_i \equiv 0 \pmod{m_j}(j\ne i)\),并且还需要满足 \(x_i \equiv a_i \pmod{m_i}\),那么令 \(d_i\) 为 \(\frac{M}{m_i}\) 在模 \(m_i\) 意义下的逆元,则 \(a_id_i\frac{M}{m_i}\) 即为合法的 \(x_i\)。
对每个同余方程求出对应 \(x_i\),最后相加即可。
扩展中国剩余定理(EXCRT)
扩展中国剩余定理用于求解一般形式的线性同余方程组。
其核心思想与 CRT 完全不同,我们希望将两个同余方程依次合并,简化为一个同余方程。
现有两个同余方程:\(x\equiv a_1 \pmod{m_1},x\equiv a_2 \pmod{m_2}\)。
由第一个方程,令通解 \(x=p\cdot m_1+a_1\)。
代入第二个方程,可得:\(p\cdot m_1\equiv a_2-a_1 \pmod{m_2}\)。
这个方程有解当且仅当 \(\gcd(m_1,m_2) \mid (a_2-a_1)\),令 \(g=\gcd(m_1,m_2)\)。
两边同时除以 \(g\),可以得到:\(p\cdot \frac{m_1}{g} \equiv \frac{a_2-a_1}{g} \pmod{\frac{m_2}{g}}\)。
由于 \(\frac{m_1}{g}\) 与 \(\frac{m_2}{g}\) 互质,所以 \(\frac{m_1}{g}\) 在模 \(\frac{m_2}{g}\) 意义下存在逆元。
所以可以得到 \(p\) 的特解:\(p \equiv \frac{a_2-a_1}{g} \cdot (\frac{m_1}{g})^{-1} \pmod{\frac{m_2}{g}}\)。
将 \(p\) 代回 \(x=p\cdot m_1+a_1\) 可得到 \(x\) 的一个特解 \(x_0\),那么方程就可以合并为:\(x\equiv x_0 \pmod{\operatorname{lcm}(m_1,m_2)}\)。

浙公网安备 33010602011771号