擴充套件BSGS/exBSGS

最爱丁珰發表於2024-03-10

先看這篇題解

下面是一些註釋

首先,這篇題解的做法相當於是跟藍書上插入查詢的物件剛好反過來,也沒有問題

然後,是對這篇題解存前兩個的解釋

首先是為什麼會存在這個問題?我們考慮\(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\))就不可能跳出迴圈節了

相關文章