离散对数相关

BSGS 算法

可爱的质数/[模板]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})\)

多少个1?

exBSGS

[模板]扩展 BSGS/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)}\)

小A与两位神仙

posted @ 2022-08-15 10:59  mklzc  阅读(88)  评论(0编辑  收藏  举报