給定 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,換過幾...