同余数论
数论:同余相关
1. 基本定义与记号
- 剩余类:模 \(n\) 同余的所有数构成的等价类被称为模 \(n\) 的剩余系。模 \(n\) 余 \(i\) 的剩余类记作 \(K_i\)。
- 完全剩余系:从 \(n\) 个模 \(n\) 剩余系中各选一个数 \(a_0,a_1...a_{n-1}\),他们构成模 \(n\) 的完全剩余系。
- 简化剩余系:从与 \(n\) 互质的剩余类中各选一个数 \(a_1,a_2...a_k\),\(k=\varphi(n)\),简化剩余系又被称为 既约剩余系 或 缩系。
- 质因子次数符号 \(v_{p}(n)\)。
- 各位数字之和符号 \(s_p(n)\) 表示 \(n\) 在 \(p\) 进制下各位数字之和。
2.费马小定理
引理:当 \(p\in P\),其因子只有两个。因此,若两个数相乘是 \(p\) 的倍数,其中至少一个一定是 \(p\) 的倍数。
当 \(a\) 不是 \(p\) 的倍数时,不存在 \(x\ne y\),且 \(1\le x,y< p\) 使得 \(xa\equiv ya \pmod p\),因为引理告诉我们,\(x-y\) 是 \(p\) 的倍数,与 \(1\le x,y<p\) 限制矛盾。
进一步,考虑 \(1\sim p-1\) 所有数,他们乘以 \(a\) 之后在模意义下互不相同,说明结果仍然是 \(1\sim p-1\) 所有数。
因此,\(\prod\limits_{i=1}^{p-1}i\equiv \prod\limits_{i=1}^{p-1} a i\pmod p\),又因为 \(\prod i\) 显然不是 \(p\) 的倍数,所以:
该结论称为 费马小定理,适用于 \(p\) 是质数,且 \(a\) 不是 \(p\) 的倍数的情形。即 \(a\perp p\)。
3. 线性求逆元
1.求连续自然数的逆元
设 \(p=ki+r\),其中 \(p\) 是模数,将其表示为除以 \(i\) 的商和余数。有:
左右同乘以 \(i^{-1}r^{-1}\),有:
inv[1] = 1;
for(int i = 2; i < p; ++ i)
inv[i] = (p - p / i) * inv[p % i] % p;
2.求连续阶乘的逆元
因此需要先 \(O(\log)\) 求出 \(n!\) 的逆元,然后逆推即可。
3.求任意n个数的逆元
与连续阶乘类似,先计算 \(n\) 个数的前缀积,记为 \(s_i\),\(O(n\log)\) 求得 \(s_n\) 的逆元,记作 \(sv_n\)。有递推式:
4. 威尔逊定理
引理:\(x^2\equiv 1\pmod p\) 当且仅当 \(x=\pm 1\)。同样用于二次剩余相关。
证明:使用平方差公式:\((x-1)(x+1)\equiv 0\pmod p\iff x=p-1,x=p+1\)。
由于乘法逆元成对存在,这启发我们思考,\(1\sim p-1\) 所有数能否两两配对互为逆元,发现除了 \(\pm1\) 以外均可以,且这两个根据引理自我配对。
这说明了威尔逊定理: \((p-1)!\equiv -1 \pmod p\)。相当于不管 \(1\),只剩下一个 \(p-1\)。对于特殊情况 p=2 依然满足。
拓展:
用于 exLucas。
5.Legendre公式
问题:求 \(n!\) 中质因子 \(p\) 的指数,即 \(v_p(n!)\)。这对我们处理组合数很有用。
特别的,当 \(p=2\) 时,\(v_2(n)=n-popcount(n)\)。
6.Kummer定理
7. 剩余系与环
结论:在长为 \(n\) 的环上每一步走 \(k\) 条边,形成的子环个数为 \(\gcd(n,k)\) 且环长为 \(\frac{n}{\gcd(n,k)}\)。
感性理解:给环标号,走到的点模 \(\gcd(n,k)\) 一定相同,且可以证明一定能走到所有同剩余系的点。
8 拓展欧几里得算法
用于求解形如 \(ax+by=c\) 的二元线性不定方程。
解的存在性:裴蜀定理 \(\gcd(a,b)|c\)。
证明:左式一定是 \(\gcd(a,b)\) 的倍数,因此只需考虑 \(c'=c/\gcd(a,b)\) 的情形即可。即 \(a,b\) 均除以 \(\gcd\)。此时 \(a\perp b\)。只需证明 \(ax\bmod b\) 可以取得 \(0\sim p-1\) 的所有数,相当于费马小定理。
求解:
只需先求 \(ax+by=\gcd(a,b)\) 即可,再将解乘以 \(\frac{c}{\gcd}\)。根据裴蜀定理,解的存在性保证。
回忆辗转相除法的过程,我们用了关键结论:\(\gcd(a,b)=\gcd(b,a\bmod b)\)
注意,前后 \(x_1\ne x_2,y_1\ne y_2\)。但是 \(a,b,\gcd\) 是相同的。
值域限制:可以证明,直接求的特殊解一定有 \(|x|\le b,|y|\le a\)。因此不必再开大一个数据类型。
一般解的形式:
\(D=(a\Delta x)= (b\Delta y)\),有 \(a,b|D\),故 \(lcm(a,b)|D\),\(\Delta x=\frac{k \cdot lcm(a,b)}{a}=\frac{k\cdot b}{\gcd(a,b)}\)。
应用:
- 求逆元:不要求 p 是质数,只需 a,p 互质。将其看做 \(ax+py=1\) 的最小正整数解 \(x\) 即可。
- 逆元个数:\(0\sim p-1\) 中有 \(\gcd(a,p)\) 个 \(a\) 的逆元,显然只有在 \(p\) 不是质数时有多个逆元。
- 若 \(a\perp b\),则 \(ax\bmod b\) 取遍 \(0\sim b-1\),这是比费马小定理强的结论。
9. 欧拉函数
定义:\([1,n]\) 中与 \(n\) 互质的个数记作 \(\varphi(n)\),\(\varphi(1)=1\)。
性质 1:\(\varphi(p^k)=(p-1)\times p^{k-1}=p^{k-1}\varphi(p)\)。
每 \(p\) 个数只有 \(kp\) 与它不互质,这也间接证明了积性。
性质2:\(\varphi(n)=n\prod\frac{p_i-1}{p_i}\)。
将性质 1 与积性带入即可。
性质3:若 \(a|b\),那么 \(\varphi(ab)=a\cdot \varphi(b)\)。
根据性质 2,\(b\) 中已经包含了 \(a\) 的所有质因子。应用于线性筛。
欧拉反演
证明:考虑枚举 \(\gcd(i,n)=d\),那么满足的 \(i\) 的充要条件是 \(i/d\perp n/d\),这样的 \(i\) 有 \(\varphi(n/d)\) 种(得到的结果均再乘以 \(d\))。
欧拉定理
考虑 \(1\sim p-1\) 中与 \(p\) 互质的数,将其记作 \(c_1,c_2,\cdots ,c_{\varphi(n)}\),根据裴蜀定理,若 \(a\perp p\),则 \(ax\bmod p\) 取遍 \(0\sim p-1\),互不相同。因此,\(ac_1,ac_2,\cdots,ac_\varphi\) 仍然互不相同,且与 \(p\) 互质。因此两个集合是相同的,他们的乘积也相同。
扩展欧拉定理
10. 离散对数
离散对数问题即在模意义下求 \(\log_ab=x\),这等价于:
考虑 Meet in the Middle,我们运用分块平衡思想,先大步求出 \(a^\sqrt n ,a^{2\sqrt n},\cdots,a^{k\sqrt n}\),并将他们的逆元作为下标扔进 map
里,注意到这里逆元不是瓶颈。即 Giant Step。
问题变为,找到一个 \(x\le \sqrt n\),使得 \(a^x\equiv c\),找到这样的 \(x\) 即可。即小步 Baby Step。复杂度 \(O(\sqrt p \log)\)。
笑点解析:1. BSGS的B不是Big而是Baby,2.BSGS和大步小步是反着来的。
实际上,可以用哈希表做到 \(O(\sqrt p)\)。具体的,设 \(x=kB-r\),则有 \(a^{kB}\equiv b a^r\),这样就不需要求逆元了。
我们从小到大枚举指数,所以得到的是最小非负整数解。
\(\log_ab\) 实际上有循环节,循环节长度被称为阶ord。
exBSGS
如果没有 \(a\perp p\),我们可以尝试将其凑成互质:将等式两边同时除以 \(d=\gcd(a,p)\),那么方程变为:
若 \(d\not\mid b\) 则无解。
此时 \(\frac{a}{d},\frac{p}{d}\) 互质,但不一定是质数,因此需要 exgcd 求逆元。移项,方程变为 \(a^{x-1}\equiv \frac{b}{d}\times(\frac{a}{d})^{-1}\pmod {\frac{p}{d}}\)。若此时 \(a\perp \frac{p}{d}\),则直接使用 BSGS 求解,否则递归进行,直到互质。
注意:BSGS前每次递归操作,\(a\) 的指数都会减一,所以记录操作次数 \(t\),最终答案 \(x=x'+t\)。
时间复杂度 \(O(\log^2+\sqrt p)\)。
11. 阶与原根
模 \(n\) 的简化剩余系在模 \(n\) 乘法意义下封闭且构成群,满足封闭性和结合律,存在逆元和单位元。将群相关的定义应用在其上,得到阶和原根(循环群生成元)的概念。
阶的定义如下:使得 \(a^x\equiv 1\pmod m\) 的最小正整数 \(x\) 被称作 \(a\) 模 \(m\) 的阶,记作 \(\delta_m(a)\)。即 \(\log_a 1\),换句话说,一个数自乘若干次,第一次得到 \(1\) 的自乘次数。与群论中ord的定义相同。
\(a\perp m\) 是存在 \(\delta_m(a)\) 的充要条件。
性质1:\(a^1,a^2,\cdots,a^{\delta_m(a)}\) 模意义下两两不同。
证明:若 \(a^i\equiv a^j\pmod m\),那么 \(a^{i-j}\equiv 1 \pmod m\) 与阶的最小性矛盾。
性质2:若\(a^n\equiv 1\pmod m\),那么 \(\delta_m(a)|n\)。
性质3:
性质4:
求阶:
- 使用 BSGS,复杂度 \(O(\sqrt m)\)。
- 根据性质2,首先令 \(x=\varphi(m)\),对于 \(\varphi(m)\) 的每个质因子 \(p\),\(x\) 不断试除 \(p\) 直到无法整除。
原神
原根的定义如下:对于 \(m\in \N_+\),\(a\in\Z\),且 \(a\perp m\),若 \(\delta_m(a)=\varphi(m)\),则称 \(a\) 为模 \(m\) 的原根。
更直观的,\(a\) 是模 \(m\) 的原根,那么(欧拉定理):
且对于任意小于 \(\varphi(m)\) 的指数,都不满足。
并不是所有数都有原根,存在原根的模 \(m\) 既约剩余系同构与循环群,因为这一概念等价于循环群中的生成元。
原根的若干次幂在模意义下取遍了所有与 \(m\) 互质的数。
原根判定定理:对于任意 \(\varphi(m)\) 的质因子 \(p\),均有 \(a^{\frac{\varphi(m)}{p}}\ne 1\)。
原根存在定理:一个数存在原根的充要条件是 \(m=2,4,p^a,2p^a\),其中 \(p\) 是奇质数。
原根个数定理:\(\varphi(\varphi(m))\) 。
最小原根大小:上界为 \(O(m^{0.25})\),实际大多会非常小,暴力枚举即可。
原根转加法
要求 \(ab\pmod m\),可以令 \(a=g^x,y=g^b\),那么就是 \(g^{x+y}\pmod m\)。相当于实数中的对数函数。