扩展BSGS/exBSGS

先看这篇题解

下面是一些注释

首先,这篇题解的做法相当于是跟蓝书上插入查询的对象刚好反过来,也没有问题

然后,是对这篇题解存前两个的解释

首先是为什么会存在这个问题?我们考虑ap1tap2t,其中p1<p2而且ap1tap2t(modp)

那么我们在枚举q的时候,我们是两种情况都要考虑的,因为此时最开始的那个等式的变换不是充要条件,我们不能漏掉任何一种可能的解

然而这样就会提升复杂度。这篇题解的解决方法是,我们设所有满足这样条件的p的集合是{p1,p2,...,pk}(假设严格递增),那么我们只用检验p1p2即可。原因如下:由于apit同余的值都相等,所以他们现在一定进入了一个指数循环节上的某一点;由于q<tp1tq可能跳出指数循环节,但是pitq(i>1)不可能跳出指数循环节,而且每一个pitq所在节点都一样,所以我们只用检验前两个。下面给出一张图来帮助理解(这是底数是124,模数是495616的情况)

比如pit245760这个点上,那么p1tq可能会跳出这个环,走到前面的那条链上的某一节点,但是pitq(i>1)一定都是在245760这个点上

我们如果按照蓝书的做法,也是可以这么做的,但是保留的就是aq的最大和次大的q了。设此时这个集合是{q1,q2,...,qk}(假设严格递减),那么这些点仍然在循环节上,而注意pt>q1,所以pt也在循环节上;那么ptq1可能跳出循环节,但是ptqi(i>1)就不可能跳出循环节了

posted @   最爱丁珰  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示