Loading

【学习笔记】离散对数和剩余

Page Views Count

离散对数

给定 \(a,p,b\),求解:

\[a^x\equiv b\pmod p \]

BSGS

\(\gcd(a,p)=1\) 时,\(a\) 在模 \(p\) 意义下有逆元,因此可以将 \(x\) 视作 \(cB-d\),其中 \(B=\lceil\sqrt{p}\rceil\),经过移项等价于:

\[a^{cB}\equiv ba^d\pmod p \]

unordered_map 存等式右边的答案,这样从大到小枚举 \(c\) 即可找出最小自然数解。时间复杂度 \(O(\sqrt{p})\)。注意 \(x=0\) 的情况需要特判。

exBSGS

\(\gcd(a,p)=d\neq 1\) 时,考虑 \(a^x=kp+b\),那么等式同除 \(d\) 应当解不变,所以有解必要条件是 \(d\mid b\)

\(a'=\frac{a}{d},b'=\frac{b}{d},p'=\frac{p}{d}\),那么方程变成:

\[a'a^{x-1}\equiv b'\pmod {p'} \]

\(a'\) 求逆元移项,因为 \(p'\) 不一定是质数,所以要用扩展欧几里得求逆元,变成:

\[a^{x-1}\equiv b'a'^{-1}\pmod {p'} \]

\(\gcd(a,p')\) 未必为 \(1\),需要递归处理子问题直到可以用 BSGS 求解,答案只需要再加上递归轮数。

在过程中需要考虑 \(p'\mid a\) 以及 \(b'=1\) 的情况。

递归过程每次至少除去 \(p\) 的一个质因子,因此时间复杂度 \(O(\log^2 p+\sqrt{p})\)

阶与原根

称所有与 \(m\) 互质的数构成模 \(m\) 的简化剩余系,则剩余系的元素构成了模 \(m\) 的乘法循环群。

定义 \(a\) 在模 \(m\) 意义下的阶 \(\delta_m(a)\) 为时 \(a^x\equiv 1\pmod m\) 的最小正整数解。发现阶存在的充要条件是 \(\gcd(a,m)=1\)

阶的一个显然的性质:\(a^x\equiv 1\pmod m\) 的充要条件是 \(\delta_m(a)\mid x\)。充分性显然,必要性即取 \(0<x \bmod \delta_m(a)\) 是更小的指数。

阶的一个比较重要的性质:\(\delta_m(a^k)=\frac{\delta_m(a)}{\gcd(\delta_m(a),k)}=\frac{\mathrm{lcm}(\delta_m(a),k)}{k}\)。第二个等号是显然的,只证明第一个等号。发现 \((a^k)^x\equiv a^kx\equiv 1\pmod m\),因此 \(\delta_m(a)\mid k\delta_m(a^k)\),且 \(\delta_m(a^k)\) 是满足条件的最小值,即 \(\frac{\delta_m(a)}{\gcd(\delta_m(a),k)}\)

原根

\(\gcd(g,m)=1\)\(\delta_m(g)=\varphi(m)\),则称 \(g\)\(m\) 的原根。这说明 \(g\)\([0,\varphi(m))\) 次恰好取遍模 \(m\) 简化剩余系的所有数。因此涉及乘方的问题都可以转成原根的若干次幂,从而忽略底数只考虑指数相等,化简了问题。

原根判定定理

\(g\)\(m\) 的原根当且仅当对于 \(\varphi(m)\) 的所有质因子 \(p\)\(g^{\frac{\varphi(m)}{p}}\not\equiv 1\pmod m\)。必要性显然,充分性可以由阶的性质得到,因为若 \(g\) 不是原根则必定有 \(\delta_m(g)\mid \frac{\varphi(m)}{p}\),其中 \(p\) 是某个 \(\varphi(m)\) 的质因子。

与此同时,数学家证明出最小原根的级别在 \(O(m^{0.25})\),因此可以 \(O(m^{0.25}\omega(m)\log m)\) 求出最小的原根,复杂度完全可以接受。

原根存在定理

不是所有的数 \(m\) 都有原根,实际只有 \(2,4,p^c,2p^c\) 才有原根,其中 \(p\) 是任意奇素数。证明略。

原根个数

由于其他原根都被表示成某个原根 \(g\) 的幂,所以若 \(\delta_m(g^k)=\varphi(m)\),则 \(g^k\) 也是原根。

根据阶的性质:\(\delta_m(g^k)=\frac{\delta_m(g)}{\gcd(\delta_m(g),k)}=\frac{\varphi(m)}{\gcd(\varphi(m),k)}\),因此所有与 \(\varphi(m)\) 互质的 \(k\) 都对应一个原根,有 \(\varphi(\varphi(m))\) 个原根。

剩余

给定 \(a,p,k\),求解:

\[x^k\equiv a\pmod p \]

存在解 \(x\),则称 \(a\)\(p\)\(k\) 次剩余,否则称 \(a\)\(p\)\(k\) 次非剩余。

这篇博客只介绍用原根求解奇素数高次剩余以及奇素数二次剩余。

利用原根求解

\(p\) 是奇素数,有原根 \(g\),可以将方程写成:

\[(g^c)^a\equiv b\pmod p \]

这样转成了离散对数问题,容易 BSGS \(O(\sqrt{p})\) 求解。

另一个做法是将 \(b\) 也转成 \(g^d\) 之后解 \(ac\equiv d\pmod {\varphi(p)}\),当然转的过程中也需要 BSGS 找到 \(d\)

同时可以求出所有解,解出 \(c\) 后容易得到:

\[x^a\equiv g^{ac+k\varphi(p)}\equiv b\pmod p \]

要求 \(a\mid k\varphi(p)\),于是 \(\frac{a}{\gcd(a,\varphi(p))}\mid k\),直接枚举 \(\frac{a}{\gcd(a,\varphi(p))}\) 的倍数即可。

注意要求 \(p\) 是奇素数而不是上面原根存在定理中的所有存在原根的数。原因是 \(x\) 能被原根表示就一定要在简化剩余系中,也就是与 \(p\) 互质,而 \(x\) 作为未知数,就只能 \(p\) 是奇素数了。

劣势是单次 \(O(\sqrt{p})\) 的复杂度过高。

二次剩余

给定 \(a,p\),其中 \(p\) 是奇素数,求解:

\[x^2\equiv a\pmod p \]

欧拉判别法和勒让德符号

先忽略 \(p\mid a\) 的情况,那么 \(a\in [1,p-1]\)。取 \(p\) 原根 \(g\),记 \(x=g^y,a=g^b\),应当有 \(g^{2y}\equiv g^b\pmod p\),所以 \(2y\equiv b\pmod {\varphi(p)}\),而 \(\varphi(p)=p-1\) 是偶数,那么有解的充要条件是 \(2\mid b\)

所以对于每个二次剩余 \(a\),应当存在两个根互为相反数,因此 \([1,p-1]\) 中一对相反数可以得到一个二次剩余,故 \(p\) 的二次剩余与非二次剩余各有 \(\frac{p-1}{2}\) 个。

欧拉判别法:

\[a^{\frac{p-1}{2}}\equiv \begin{cases} 0\pmod p&p\mid a\\ 1\pmod p&p\nmid a\land\exists x,x^2\equiv a\pmod p\\ -1\pmod p&\text{otherwise} \end{cases} \]

这里证明可以先利用费马小定理:

\[a^{p-1}-1\equiv \left(a^{\frac{p-1}{2}}+1\right)\left(a^{\frac{p-1}{2}}-1\right)\equiv 0\pmod p \]

于是 \(a^{\frac{p-1}{2}}\)\(1\)\(-1\) 中的一个数同余。同时 \(a=g^b\),若 \(a\) 是二次剩余则 \(2\mid b\),从而 \(a^{\frac{p-1}{2}}\equiv(g^{p-1})^{\frac{b}{2}}\equiv 1\pmod p\)。而在其他情况下只能与 \(-1\) 同余。

勒让德符号:

\[\left(\dfrac{a}{p}\right)= \begin{cases} 0&p\mid a\\ 1&p\nmid a\land\exists x,x^2\equiv a\pmod p\\ -1&\text{otherwise} \end{cases} \]

所以欧拉判别法的结果和勒让德符号相等。

Cipolla 算法

Cipolla 算法具有使用的模意义下的复数扩域,具有魔法般的构造。

取一个非二次剩余 \(\omega\),记 \(i=\sqrt{\omega}\),将数域扩充至 \(\{a+bi\mid a,b\in[0,p-1]\}\),此时的复数乘法是:\((a+bi)(c+di)=(ac+bd\omega)+(ad+bc)i\)。注意此时 \(\omega\) 未必是 \(-1\)

Cipolla 算法需要找到一个正整数 \(b\) 使得 \(\omega=b^2-a\),即 \(b^2-a\) 是非二次剩余,断言此时 \((b+i)^{\frac{p+1}{2}}\) 就是其中一个根。

证明需要两个引理:

  • \(i^p\equiv -i\pmod p\),可以直接由 \(i^{p-1}\equiv \omega^{\frac{p-1}{2}}\equiv -1\pmod p\) 得来。

  • \((x+y)^p\equiv x^p+y^p\pmod p\),这个是老生常谈了,卢卡斯定理的证明也用到了这个引理,直接二项式展开即可,即便是扩域也可以在取模。

于是可以推导:

\[\begin{aligned} \left((b+i)^{\frac{p+1}{2}}\right)^2&\equiv(b+i)^{p+1}\\ &\equiv (b+i)(b^p+i^p)\\ &\equiv (b+i)(b-i)\\ &\equiv b^2-i^2\\ &\equiv a\pmod p \end{aligned}\]

那么现在只需要找这个 \(b\) 了,做法是直接 \([0,p-1]\) 内随机,因为二次剩余和非二次剩余数量相当,所以期望意义下只需要 \(2\) 次左右。时间复杂度 \(O(\log p)\)

参考资料

离散对数

  • OI Wiki

阶与原根

剩余

posted @ 2024-01-25 16:34  SoyTony  阅读(72)  评论(0编辑  收藏  举报