1. 程式人生 > >BSGS算法

BSGS算法

其中 一個 結束 所有 復雜 什麽是 得到 是否 觀察

 問題:

給出a,b,p,求x使得a^x對p取模是b。

1.令r是一個小於根號p範圍的數。

2.循環a^0,a^1,a^2......a^r-1,如果有滿足條件的,算法結束。

3.否則我們設x=cr-d(為什麽是-d呢,主要是為了方便後面把a^d放到右邊),然後我們得到了:a^cr對p取模是b*a^d

4.現在我們觀察這個式子,其中b*a^d是不變的(0<=d<r),所以我們把所有的b*a^d存入Hash,枚舉c小於根號p,再看(a^r)^c是否在Hash中出現

復雜度O(p^(1/2))

BSGS算法