离散对数相关
BSGS 算法
给定整数 \(a,b,p\),其中 \(a,p\) 互质,求一个非负整数 \(x\),使得 \(a^x\equiv b\pmod p\)
朴素算法概述:
考虑一个暴力算法,在 \(\bmod~p\) 的意义下,\(a^x\) 显然有一个长度为 \(\varphi(p)\) 的循环节,所以只需要考虑 \(x\le \varphi(p)\) 的情况即可。
暴力枚举 \(x\) 求解,时间复杂度 \(O(\varphi(p))\),最坏 \(O(p-1)\)
而 \(BSGS\) 则运用类似于拆半搜索的思想,将 \(x\) 表示成 \(i\times t - j\) 的形式。
于是原式 \(\to a^{i\times t}\equiv b\times a^{j}\pmod p\)
固定 \(t\) 的值,预处理出右式所有可能的取值。
枚举计算左式可能的值,当枚举到某个在右边已经出现过的值时,此时 \(i\times t - j\) 就是我们要求的 \(x\)。
\(t\) 的取值:
\(j\) 的取值为 \(\varphi(p) \bmod t\) 共计 \(t-1\) 个,\(i\) 的取值有 \(\lceil\frac{\varphi(p)}{t}\rceil\) 个。
\(t\) 取 \(\sqrt{\varphi(p)}\) 时有最优复杂度(最平均),但为避免计算 \(\varphi(p)\),近似取 \(t=\sqrt{p}\) 即可。
时间复杂度 \(O(\sqrt{p})\)
exBSGS
求解 \(a^x\equiv b\pmod p\) 需要满足条件 \(a\perp p\) ,而 \(exBSGS\) (扩展 \(BSGS\))主要解决 \(a\not\perp p\) 的情况。
设 \(d=gcd(a,p)\),若我们把同余式两边同时除以 \(d\) ,如此可以构造互质。
因为 \(d\mid a^x\bmod p\),所以 \(b\neq 1\) 时,必然有 \(d\mid b\) ,否则原同余式无解。
于是原式 \(\to a^{x-1}\frac{a}{d}\equiv \frac{b}{d}\pmod {\frac{p}{d}}\)
运用 \(exgcd\) ,原式 \(\to a^{x-1}\equiv \frac{b}{d}(\frac{a}{d})^{-1}\pmod {\frac{p}{d}}\)
但是 \(a\) 不一定与 \(\frac{p}{d}\) 互质,于是递归进入子问题求解,直到 \(a\) 与模数互质(\(d=1\))为止。
阶
若对于 \(p\in \mathbb{N}^{+}, p\neq 1, a\in \mathbb{Z},\) 满足 \(\gcd(a, n) = 1\),则必定 \(\exists~r\in \mathbb{N}^{+}, \text{ s.t. } a^r\equiv 1\pmod p\)
满足 \(a^r\equiv 1\pmod p\) 的最小 \(r\) 称为 \(a\) 模 \(r\) 的阶,记为 \(\mathrm{ord}_p(a)=1\)
\(\mathrm{Theorem~}1.1:\) 若 \(\mathrm{ord}_{p}(a)=r\) ,则对于 \(\forall b\in \mathrm{N}^{+}\) 满足 \(a^q\equiv 1\pmod n\),都有 \(r\mid q\) 。
证明:
反证法,若 \(r\nmid q\) ,设 \(q=kr+b\)(\(0<b<r\)),则 \(a^q\equiv a^{kr+b}\equiv a^{kr}\times a^b\pmod p\)
由于 \(a^{kr}\equiv a^r\equiv 1\pmod p\) ,可推知 \(a^b\equiv 1\pmod p\)。
因为 \(b < r\) ,这便与阶的定义矛盾。
故命题得证。
特别地,
- 由欧拉定理知,\(r\mid \varphi(n)\)
- 当 \(p\) 为素数时,由费马小定理知:\(r\mid n-1\)
原根
定义:设 \(p\) 是正整数,\(a\) 是整数,若 \(a\) 模 \(p\) 的阶等于 \(\varphi(p)\),则称 \(a\) 为模 \(p\) 的一个原根。
模板题 : 【模板】原根 - 洛谷
以下结论证明从略。
\(\mathrm{Theorem~}2.1\): 形如 \(2,4,2p^c,p^c\) 的数才有原根,其中 \(p\) 为奇素数。
\(\mathrm{Theorem~}2.2\):
当求出一个原根 \(g\) 时,可以按照如下方法构造出其他所有原根:所有的 \(g^k, k\perp \varphi(p)\) 。
\((g^k)^{\varphi(p)}\equiv 1\pmod p\)
若存在 \((g^k)^x\equiv 1\pmod p, x < \varphi(p)\)
那么必然存在 \(g^{kx\bmod \varphi(p)}\equiv 1\),与 \(g\) 是原根矛盾。
由上可知,\(p\) 的原根共有 \(\varphi(\varphi(p))\) 个。
\(\mathrm{Theorem~}2.3\):
判断 \(a\) 在 \(\bmod p\) 意义下的阶是否为 \(\varphi(p)\) 时,只需要求得 \(\varphi(p)\) 的质因数 \(p_1,p_2\dots\),然后判断 \(a^{\frac{\varphi(p)}{p_i}}\) 即可。
由定理 \(1.1\) 可知,判定 \(a^x\equiv 1\) 只需判定 \(\varphi(p)\) 的所有约数即可。
又 \(a^{x}\equiv 1\) 时,必定有 \(a^{cx}\equiv 1\) 。
那么,可以证明取出所有 \(\varphi(p)/p_i\) 即可判断 \(a\) 的阶是否为 \(\varphi(p)\) 。
根据如上三个定理,即可通过此题(注意特判模数为 \(2\) 的情况)。
\(\mathrm{Theorem~}2.4\): 设 \(g\) 为 \(p\) 的原根,则 \(g^1, g^2\dots g^{\varphi(p)}\) 构成 \(\bmod~p\) 下的简化剩余系。
易得出,\(g^1\sim g^{\varphi(p)}\) 两两均不相同。
由于 \(g\) 与 \(p\) 互质,所以 \(g^1, g^2\dots g^{\varphi(p)}\) 构成 \(\bmod~p\) 意义下的简化剩余系。
指标
\(\mathrm{Theorem~}2.5\):
设 \(g\) 为 \(\bmod~p\) 的一个原根,对于与 \(p\) 互质的整数 \(a\) ,存在唯一的整数 \(x\) 满足,\(g^x\equiv a\pmod p\) 。
由 \(\mathrm{Theorem~}2.4\) 易得。
定义:
对于上述 \(x\) ,就称 \(x\) 为以 \(g\) 为底,\(\bmod p\) 的一个指标,记为 \(x=\mathrm{ind_{p, g}{a}}\)
在无歧义时,简记为 \(\mathrm{x=ind(a)}\)。
由指标的定义不难得出以下性质:
\(\mathrm{Theorem~}2.6\):
\(a\equiv b\pmod p\Leftrightarrow \mathrm{ind(a)}\equiv ind(b)\pmod {\varphi(p)}\)
\(\mathrm{Theorem~}2.7\):
\(\mathrm{ind(ab)}\equiv \mathrm{ind(a)+ind(b)}\pmod {\varphi(p)}\)
\(\mathrm{Theorem~}2.8\):
\(\mathrm{ind(a^k)}\equiv k*\mathrm{ind(a)}\pmod{\varphi(p)}\)