先看这篇题解
下面是一些注释
首先,这篇题解的做法相当于是跟蓝书上插入查询的对象刚好反过来,也没有问题
然后,是对这篇题解存前两个的解释
首先是为什么会存在这个问题?我们考虑\(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\))就不可能跳出循环节了
标签:跳出,pt,题解,exBSGS,扩展,节上,循环,这篇,BSGS From: https://www.cnblogs.com/dingxingdi/p/18064312