数学学习笔记
原根
阶
定义
对于互质的正整数 \(a,n\),满足 \(a^r\equiv 1 \pmod n\) 的最小正整数 \(r\) 称为 \(a\) 对模 \(n\) 的阶,记为 \(\delta_n(a)=r\)。
性质
- 若 \(a,n\) 互质,则 \(\delta_n(a)\) 一定存在且小于等于 \(\varphi(n)\)。
- 对于 \(i=1,2,\cdots,\delta_n(a)\),\(a^i \bmod n\) 两两不相等。
- 若 \(k\) 满足 \(a^k\equiv 1 \pmod n\),则 \(\delta_n(a)|k\)。
- \(\delta_n(a)\delta_n(b)=\delta_n(ab)\Leftrightarrow \gcd(a,b)=1\)。
- \(\delta_n(a^k)=\frac{\delta_n(a)}{\gcd(\delta_n(a),k)}\)。
证明:
- 由欧拉定理 \(a^{\varphi(n)}\equiv1\pmod n\) 可得。
- 假设有 \(1\leq i< j < \delta_n(a)\) 满足 \(a^i\equiv a^j\pmod n\)。因为 \(\gcd(a^j,n)=1\),所以 \(a^j\) 存在模 \(n\) 的逆元,原式可变形为 \(a^{j-i}\equiv1\pmod n\)。\(i-j<\delta_n(a)\) 且是阶,矛盾!
- 略。
后面的鸽了。
原根
定义
满足 \(\delta_n(a)=\varphi(n)\) 的 \(a\) 称为 \(n\) 的原根。
求解原根
先考虑判断一个数 \(a\) 是不是 \(n\) 的原根。
首先必须有 \(\gcd(a,n)=1\),否则 \(a^{\varphi(n)}\bmod n\neq 1\),此时有 \(\delta_n(a)\leq\varphi(n)\)。
我们对 \(\varphi(n)\) 分解质因数,若不存在 \(\varphi(n)\) 的一个质因子 \(p\) 满足 \(a^{\frac{\varphi(n)}{p}}\equiv1\pmod n\),则说明 \(a\) 是 \(n\) 的一个原根。
正确性比较好理解。一定有 \(\delta_n(a)|\varphi(n)\),若其不整除任何的 \(\frac{\varphi(n)}{p}\),则说明它只能整除 \(\varphi(n)\),结合 \(\delta_n(a)\leq\varphi(n)\) 可得出 \(\delta_n(a)=\varphi(n)\)。
此时可以从 \(2\) 开始依次检测是否为原根,得到最小原根。若 \(a\) 为最小原根,则可以通过其生成所有的原根。
根据阶的性质,有 \(\delta_n(a^k)=\frac{\delta_n(a)}{\gcd(\delta_n(a),k)}\)。已知 \(\delta_n(a)=\varphi(n)\),则可得 \(\delta_n(a^k)=\frac{\varphi(n)}{\gcd(\varphi(n),k)}\)。要使 \(\delta_n(a^k)=\varphi(n)\),只能有 \(\gcd(\varphi(n),k)=1\)。我们可以通过此方法生成 \(\varphi(\varphi(n))\) 个原根。
可以证明这些原根就是所有的原根(证明鸽了)。
所以我们在 \(O(n\log^2n)\) 的时间内求解了一个数的所有原根。
实际上,一个数的最小原根在 \(O(n^{0.25})\) 量级。
一些 trick
- 看到对指数进行若干运算且模数保证质数时,可以考虑求出原根来统一底数。
- \(\sum_{i=1}^p\delta_p(i)=\sum_{i=1}^p\frac{p-1}{\gcd(p-1,i)}\)。证明考虑任意一个原根 \(g\),\(\delta_p(a)=\delta_p(g^x)=\frac{p-1}{\gcd(p-1,x)}\),而 \(a\) 与 \(g^x\) 一一对应。
- \(\exist k,x^k\equiv y\pmod p \Leftrightarrow \delta_p(y)|\delta_p(x)\),两边同时取 \(\delta_p(x)\) 次幂可得。
BSGS
用来求解形如 \(a^x\equiv n\pmod m\) 的同余方程,其中 \(\gcd(a,m)=1\)。
由欧拉定理可得 \(a^x\) 的循环节长度为 \(\varphi(m)\)。所以,如果有解,则在 \([1,\varphi(m)]\) 内必有一解。
设最终解出的 \(x=kT-i\),其中 \(T\) 是阈值,\(0\leq i<T\),那么对方程变形可得 \((a^T)^k\equiv a^in\pmod m\)(此处要求 \(\gcd(a,m)=1\))。
因为 \(x\leq\varphi(m)<m\),所以 \(k\leq\lceil\frac{m}{T}\rceil\)。所以枚举所有的 \(i\) 将 \((a^in,i)\) 插入哈希表中,再枚举所有的 \(k\) 查询 \(a^{kT}\) 是否在哈希表内,如果在就说明有解。
时间复杂度 \(O(\frac{p}{T}+T)\),平衡复杂度可得 \(O(\sqrt p)\)。对于统一底数的多组询问,复杂度为 \(O(\frac{p}{T}+qT)\),可平衡复杂度为 \(O(\sqrt{pq})\)。
exBSGS
若不保证 \(\gcd(a,m)=1\),我们也有办法解出方程。
具体地,设 \(d=\gcd(a,m)\),则同除 \(d\) 可得 \(\frac{a}{d}a^{x-1}\equiv \frac{b}{d}\pmod{\frac{m}{d}}\),当 \(d\nmid b\) 时显然无解。
这么一直除下去,直到 \(\gcd(a,m)=1\)。设除过的因数为 \(d_i\),除了 \(k\) 次,那么现在方程变为:
用 BSGS 做即可。注意左边的 \(\frac{a^k}{\prod_{i=1}^k d_i}\) 不能除过去,要在做 BSGS 的时候带上系数。
二次剩余
定义
若 \(\gcd(n,p)=1\) 且存在 \(x^2\equiv n\pmod p\),那么我们说 \(n\) 是模 \(p\) 的二次剩余,否则我们说其不是二次剩余。
定义勒让德符号 \((\frac{n}{p})\) 为:
用来表示 \(n\) 是否是 \(p\) 的二次剩余。
解的个数
要求解 \(x^2\equiv n\pmod p\),首先要明确的是,有几个解?
肉眼观察可以发现,当 \(x\) 是根时,\(-x\) 也是。
假设 \(x_0,x_1\) 是两个不同根,那么有 \(x_0^2\equiv x_1^2\),变形得 \((x_1+x_0)(x_1-x_0)\equiv0\)。因为是不同根,所以只有可能是 \(x_0=-x_1\)。
现在我们就知道了,这个方程要么没有根,要么有两个互为相反数的根。
判定
欧拉判别法给出了一个数是否为奇素数 \(p\) 的二次剩余的判断方法:
如何证明?
找出一个原根 \(g\),设 \(n=g^k\),那么如果 \(n^{\frac{p-1}{2}}\equiv1\),就有 \(g^{k\frac{p-1}{2}}\equiv1\),变形得 \((g^{p-1})^\frac{k}{2}\equiv1\),必有 \(k\) 为偶数。
当 \(k\) 为偶数时,就有 \((g^\frac{k}{2})^2\equiv n\),显然 \(n\) 是二次剩余。
否则,由费马小定理,当 \(p\nmid n\) 时有 \(n^{p-1}\equiv1\),那么我们可以知道 \(n^{\frac{p-1}{2}}\equiv\pm1\),所以当其等于 \(-1\) 时是非二次剩余,证毕。
此外,在这 \(p-1\) 个数中正好一半是二次剩余,一半是非二次剩余。
求解
那么如何求出具体解呢?
BSGS
先求出 \(p\) 的一个原根 \(g\),设 \(x=g^k\),原式变形为 \(g^{2k}\equiv n\),即 \((g^2)^k\equiv n\)。
此时我们 BSGS 求出 \(k\),\(g^k\) 即为方程一根。
可以如法炮制扩展到 \(n\) 次剩余。时间复杂度 \(O(\sqrt p)\)。
Cipolla
尝试将数域扩展到类似复数的域上,当务之急是定义虚数单位。
随便找一个 \(a\) 满足 \(a^2-n\) 是非二次剩余,期望需要找 \(2\) 次。定义虚数单位 \(i^2=a^2-n\)。
此时我们要构造一个数满足其偶数次幂等于 \(n\)。古人告诉我们,\((a+i)^{p+1}\equiv n\)。
考虑使用二项式定理展开。关于模意义下的二项式定理有一个非常优美的形式,\((x+y)^p\equiv x^p+y^p\pmod p\),这是因为二项式系数只有 \(\binom{p}{0}\) 和 \(\binom{p}{p}\) 不是 \(p\) 的倍数。
对原式变形,得到了 \((a+i)(a^p+i^p)\equiv n\)。
其中根据费马小定理 \(a^p\equiv a\),剩下的能变形的好像只有 \(i^p\) 了,推导一下:\(i^p\equiv i(a^2-n)^{p-1}\equiv i((a^2-n)^{\frac{p-1}{2}})^2\equiv -i\)。
所以左式等于 \((a+i)(a-i)=a^2-i^2\),将虚数单位的定义带入,得到 \(n\)。
另外,我们还要证明 \((a+i)^{\frac{p+1}{2}}\) 的虚部为 \(0\)。
假设存在一个 \((A+Bi)^2\equiv n\) 且 \(B\neq0\),那么展开通过变形可得 \(A^2+B^2(a^2-n)-b\equiv -2ABi\),左右两边实部虚部分别相等,得到 \(AB=0\)。既然 \(B\neq0\) 那么就有 \(A=0\),得到 \((Bi)^2\equiv n\)。将 \(B^2\) 除过去可得 \(i^2\equiv nB^{-2}\),这与 \(i^2\) 是非二次剩余矛盾。
综上 \((a+i)^{\frac{p+1}{2}}\) 就是我们要求的一个解。
时间复杂度仅有快速幂的 \(O(\log p)\)。
用途
一个用途是模意义下的二次方程求解:
求根公式:
求出 \(b^2-4ac\) 的二次剩余即可。
另一个常用用途是用于模意义下的斐波那契数列的计算。熟知斐波那契数列的通项公式:
只要知道 \(5\) 的二次剩余,我们就能通过快速幂在 \(O(\log n)\) 的时间内在模意义下求出任意的 \(F_n\)(虽然矩阵乘法也是这个复杂度来着)。
需要注意的是,\(5\) 是模 \(10^9+7\) 的非二次剩余,但是是模 \(10^9+9\) 的二次剩余,为 \(383008016\)。
二次互反律
二次互反律指出了两个奇素数 \(p,q\) 是否为互相的二次剩余的规律:
例:若一个奇素数 \(p\) 满足 \(p\bmod 10\) 为完全平方数,求证:\(5\) 是模 \(p\) 的二次剩余。
列出 \(10\) 以内的奇完全平方数:\(1,9\)。发现在模 \(5\) 意义下其为 \(1,-1\),可以得到 \(p\equiv\pm1\pmod5\),进而可以推出 \(p^\frac{5-1}{2}\equiv p^2\equiv 1\pmod 5\),即 \(p\) 是模 \(5\) 的二次剩余。
将已知带入二次互反律,可得 \((\frac{5}{p})=1\),即 \(5\) 是模 \(p\) 的二次剩余。证毕。
积性函数
定义
数论函数
数论函数,即为定义域为正整数的函数,可被视为一个数列。
常见的数论函数有:
- 常函数 \(1(n)=1\)。
- 恒等函数 \(\operatorname{id}_k(n)=n^k\),\(\operatorname{id}_1(n)\) 常记作 \(\operatorname{id}(n)\)。
- 单位函数 \(\varepsilon(n)=[n=1]\)。
- 除数函数 \(\sigma_k(n)=\sum_{d\mid n}d^k\),\(\sigma_0(n)\) 常记作 \(d(n)\),\(\sigma_1(n)\) 常记作 \(\sigma(n)\)。
- 欧拉函数 \(\varphi(n)=\sum_{i=1}^n[\gcd(n,i)=1]\)。
积性函数
若数论函数 \(f(n)\) 满足对于任意互质的 \(x,y\),有 \(f(x)f(y)=f(xy)\),则 \(f(n)\) 是积性函数。
若数论函数 \(f(n)\) 满足对于任意的 \(x,y\),有 \(f(x)f(y)=f(xy)\),则 \(f(n)\) 是完全积性函数。
可以看出,若一个数是完全积性函数,则其一定是积性函数。
以上列出的函数中,\(1(n),\operatorname{id}(n),\varepsilon(n)\) 为完全积性函数,剩下的为积性函数。
若 \(f(n),g(n)\) 为积性函数,则 \(f(n^k),f(n)^k,\sum_{d\mid n}f(d),f(n)g(n),\sum_{d\mid n}f(n)g(\frac{n}{d})\) 都为积性函数。
用途
若数论函数 \(f(n)\) 是积性函数,则有 \(f(n)=\prod f(p^{k})\),其中 \(p\) 为 \(n\) 质因子,\(k\) 为其幂次。
如果我们知道 \(f(p^k)\) 的直接表达式,那么我们就可以线性筛出这个数论函数,或者 \(O(\sqrt n)\) 通过分解质因数来查询它。
在比赛中,我们可以通过打表快速检验一个数论函数是否是积性函数。
欧拉函数
欧拉定理
若 \(\gcd(a,m)=1\),则 \(a^{\varphi(m)}\equiv 1\pmod m\)。
所以我们可以对指数取模:\(a^k\equiv a^{k\bmod\varphi(m)}\pmod m\)。
更一般地,对于任意 \(a,m\),有:
幂塔
给你 \(n,p\) 和数列 \(a_n\),求出 \(a_1^{a_2^{\cdots^{a_n}}}\bmod p\)。
首先考虑使用扩展欧拉定理降幂。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具