数学学习笔记

原根

定义

对于互质的正整数 \(a,n\),满足 \(a^r\equiv 1 \pmod n\) 的最小正整数 \(r\) 称为 \(a\) 对模 \(n\) 的阶,记为 \(\delta_n(a)=r\)

性质

  1. \(a,n\) 互质,则 \(\delta_n(a)\) 一定存在且小于等于 \(\varphi(n)\)
  2. 对于 \(i=1,2,\cdots,\delta_n(a)\)\(a^i \bmod n\) 两两不相等。
  3. \(k\) 满足 \(a^k\equiv 1 \pmod n\),则 \(\delta_n(a)|k\)
  4. \(\delta_n(a)\delta_n(b)=\delta_n(ab)\Leftrightarrow \gcd(a,b)=1\)
  5. \(\delta_n(a^k)=\frac{\delta_n(a)}{\gcd(\delta_n(a),k)}\)

证明:

  1. 由欧拉定理 \(a^{\varphi(n)}\equiv1\pmod n\) 可得。
  2. 假设有 \(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)\) 且是阶,矛盾!
  3. 略。

后面的鸽了。

原根

定义

满足 \(\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

  1. 看到对指数进行若干运算且模数保证质数时,可以考虑求出原根来统一底数。
  2. \(\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\) 一一对应。
  3. \(\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\) 次,那么现在方程变为:

\[\frac{a^k}{\prod_{i=1}^k d_i}a^{x-k}\equiv \frac{b}{\prod_{i=1}^k d_i}\pmod{\frac{m}{\prod_{i=1}^k d_i}} \]

用 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})\) 为:

\[(\frac{n}{p})=\begin{equation} \left\{ \begin{aligned} 0,&\space n\equiv 0\pmod {p}\\ +1,&\space \exists x,x^2\equiv n\pmod p\\ -1,&\space \nexists x,x^2\equiv n\pmod p\\ \nonumber \end{aligned} \right. \end{equation} \]

用来表示 \(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\) 的二次剩余的判断方法:

\[(\frac{n}{p})=n^{\frac{p-1}{2}}\bmod 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)\)

用途

一个用途是模意义下的二次方程求解:

\[ax^2+bx+c\equiv0\pmod p \]

求根公式:

\[x=\frac{-b\pm\sqrt{b^2-4ac}}{2a} \]

求出 \(b^2-4ac\) 的二次剩余即可。

另一个常用用途是用于模意义下的斐波那契数列的计算。熟知斐波那契数列的通项公式:

\[F_n=\frac{1}{\sqrt 5}((\frac{1+\sqrt 5}{2})^n-(\frac{1-\sqrt 5}{2})^n) \]

只要知道 \(5\) 的二次剩余,我们就能通过快速幂在 \(O(\log n)\) 的时间内在模意义下求出任意的 \(F_n\)(虽然矩阵乘法也是这个复杂度来着)。

需要注意的是,\(5\) 是模 \(10^9+7\) 的非二次剩余,但是是模 \(10^9+9\) 的二次剩余,为 \(383008016\)

二次互反律

二次互反律指出了两个奇素数 \(p,q\) 是否为互相的二次剩余的规律:

\[(\frac{p}{q})(\frac{q}{p})=(-1)^{\frac{p-1}{2}\frac{q-1}{2}} \]

例:若一个奇素数 \(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. 常函数 \(1(n)=1\)
  2. 恒等函数 \(\operatorname{id}_k(n)=n^k\)\(\operatorname{id}_1(n)\) 常记作 \(\operatorname{id}(n)\)
  3. 单位函数 \(\varepsilon(n)=[n=1]\)
  4. 除数函数 \(\sigma_k(n)=\sum_{d\mid n}d^k\)\(\sigma_0(n)\) 常记作 \(d(n)\)\(\sigma_1(n)\) 常记作 \(\sigma(n)\)
  5. 欧拉函数 \(\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\),有:

\[a^k\equiv \left\{ \begin{aligned} &a^{k\bmod\varphi(m)},\space\gcd(a,m)=1\\ &a^k,\gcd(a,m)\neq1,k<\varphi(m)\\ &a^{k\bmod\varphi(m)+\varphi(m)},\gcd(a,m)\neq1,k\geq\varphi(m) \end{aligned} \right. \]

幂塔

给你 \(n,p\) 和数列 \(a_n\),求出 \(a_1^{a_2^{\cdots^{a_n}}}\bmod p\)

首先考虑使用扩展欧拉定理降幂。

posted @   Linge_Zzzz  阅读(5)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示