北上廣深演算法 BSGS

2021-10-08 18:45:05 字數 1616 閱讀 9868

給定 a,p

,b

,a, p, b,

a,p,b,

求滿足 ax≡

b(mo

dp

)a^ \equiv b\pmod p

ax≡b(m

odp)

的最小自然數 xxx。

普通的 bsgs 假設了 p

pp 為質數。

令 x=i×

m−

jx = i \times m -j

x=i×m−

j,其中 m=⌈

p⌉

m = \lceil \sqrt \rceil

m=⌈p​⌉

,注意是向上取整。那麼原式為

a i×

m−j≡

b(mo

dp

)a^ \equiv b \pmod p

ai×m−j

≡b(m

odp)

移項得到

a i×

m≡b×

aj(m

odp)

a^ \equiv b \times a^j \pmod p

ai×m≡b

×aj(

modp

)列舉 j∈[

0,m]

j \in [0,m]

j∈[0,m

],預處理出 b×a

jb \times a^j

b×aj

並在乙個桶中記錄。

列舉 i∈[

1,m]

i \in [1,m]

i∈[1,m

],找到第乙個滿足 ai×

m≡b×

aj(m

odp)

a^ \equiv b \times a^j \pmod p

ai×m≡b

×aj(

modp

)。此時 x=i

×m−j

x = i \times m - j

x=i×m−

j 即為答案。

證明略,我不會。可以發現 bsgs 複雜度為 p

\sqrt

p​,如果用 map 當桶的話加個 log

⁡\log

log。

#include

using

namespace std;

const

int n =

1e5+

5, inf =

0x3f3f3f3f

;#define int long long

inline

intread()

//a^x = b (mod p)

map<

int,

int> mp;

intksm

(int a,

int k,

int p)

return res % p;

}int

bsgs

(int a,

int b,

int p)

return-1

;}signed

main()

BSGS(拔山蓋世演算法),北上廣深演算法

1.引入 bsgs演算法又名拔山蓋世演算法,也叫北上廣深演算法,也叫大步小步演算法,總之就是名字很多了,但是實際上他就是乙個解決同餘方程 給定a,b,p,求最小的非負整數x,滿足 ax b mod p 2.過程 先令 x i m j,其中 m ceil sqrt p ceil是向上取整。這樣原式就變...

逃離北上廣

逃離北上廣 不是個新鮮詞,在今年便親身體驗了一回,記得前幾年在知乎上看到一篇關於逃離的話題,引起大家熱議,說明很多人都關注這個問題,很多人都面臨這個狀態,身邊也有人已經開始行動了。我也一直處於糾結狀態,從12年的霧霾逐漸加重到成為常態,這種逃離的想法一直藏在心底,做出行動總是會被生活中的某一件事或是...

北上廣深程式設計師,月薪三萬不如狗

曾經在北上廣深,程式設計師是乙個外表多麼光鮮的職業。程式設計師畢業五年左右,月收入一般可以達到兩三萬塊。週末下館子,乙個月出去旅行一趟,供的起房子 買的起車子,這樣的生活令多少人羨慕。雖然碼農的生活加班比較苦,但倒也衣食無憂。高收入令程式設計師自帶高大上的光環,找女朋友也容易。多少漂亮的mm,換過幾...