BSGS离散对数(Baby-Step-Giant-Step)

Posted 玄方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BSGS离散对数(Baby-Step-Giant-Step)相关的知识,希望对你有一定的参考价值。

BSGS离散对数(Baby-Step-Giant-Step)

题目:

给定\(x,y,p,\)求最小的自然数\(k\)满足\(x^k=y(\mod p)\)\(p\le2^{31}\)(满足一定有答案)

题解:

因为\(x^{p-2}=1\pmod{p}\)

那么答案最大不会超过\(p-2\),因为大于的话直接减掉\(p-2\)同样成立

直接枚举复杂度是\(O(p)\)级别的

考虑\(k\)可以表示成\(a\sqrt p +b\)的形式,那么我们考虑要怎么求\(a,b\)

\(a,b\)满足要求,既\(x^{a\sqrt p }\times x^{b}=y \pmod{p}\)

\(x^{a\sqrt p}=y\times x^{-b} \pmod{p}\)

那么,如果我们对于每个\(x^{a\sqrt(p)}\)都可以\(O(1)\)判断,那么整个算法的复杂度就可以降到\(O(\sqrt p)\)

对于\(1\)\(\sqrt p\)我们直接处理,将其\(x^{-b}\times y\pmod{p}\)插入哈希表(因为p太大了所以不能直接用数组)。

那么对于每个\(x^{a\sqrt{p}}\)即可在哈希表中查找。

那么复杂度就是\(O(\sqrt{p}\times 哈希表常数)\)

即可解决问题\(√\)

核心思想:

暴力出奇迹,转成根号级别的暴力,复杂度就对了。

以上是关于BSGS离散对数(Baby-Step-Giant-Step)的主要内容,如果未能解决你的问题,请参考以下文章

数论-离散对数

CF1106F Lunar New Year and a Recursive Sequence(矩阵快速幂+bsgs+exgcd)

Luogu 9月月赛A(BSGS)

[bzoj2242][SDOI2011]计算器

exBSGS算法

离散对数和原根