扩展BSGS/exBSGS

先看这篇题解

下面是一些注释

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

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

首先是为什么会存在这个问题?我们考虑\(a^{p_1t}\)\(a^{p_2t}\),其中\(p_1<p_2\)而且\(a^{p_1t}\equiv a^{p_2t} (mod\: p)\)

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

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

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

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

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值