BSGS與二次剩餘
阿新 • • 發佈:2019-02-13
BSGS
我們要求中x的值,其中p為質數,或者a和p互質。
x可以寫成:,其中k為常數。
那麼
那麼我們可以預處理每一個j的,存進set或者map裡,然後列舉i,看看map裡存不存在。當的時候複雜度最優。
當p和a不互質的時候,可以先把他們的gcd除乾淨(兩邊同時除gcd(a,p)之後可能gcd(a,p/d)!=0)
二次剩餘
我們要求中x的值,其中且a!=0,p為質數,p=2我們不討論,0我們直接出解嘛。
如果a存在解,那麼我們把a叫做模p意義下的二次剩餘,否則為二次非剩餘。
先來研究一些性質。
定理1:對於一個p,有(p-1)/2個二次剩餘。
證明:,那麼,顯然不能是p的倍數,那麼x1+x2=p,這樣,我們發現每個x的平方會和另一個x的平方同餘,而且他們的和為p,由於只有p-1個x,那麼 的值就只有(p-1)/2個。
定理2:若,那麼x不存在,若=1,那麼x必定存在且有兩個,記為x1,x2,其中x1+x2=p。
證明:若=-1,那麼由原方程可以推出,又有費馬小定理,矛盾,所以x不存在。後者就是定理一的內容。
定義一個數的勒讓德符號他的取值有三個,1,-1,0,1代表a是p下的二次剩餘,-1代表不是,0僅當a%p=0。那麼易得。
好了,現在我們來求x:
如果a不是二次剩餘,返回無解。
如果是,那麼有一個可行的做法如下:
首先找到一個c,使得 的勒讓德符號為-1,也即無法開根。
定義同餘複數域,一個複數,其中,乘法等運算和通常意義上的複數一樣。
有一個很強的結論: