转载:https://blog.csdn.net/clove_unique/article/details/50740412
引入
BSGS算法,原名Baby Steps Giant Steps,又名大小步算法,拔山盖世算法,北上广深算法——by SLYZoier,数论基本算法之一。
问题
题解
讨论
模板:(map版本)
ll bsgs(ll a,ll b,ll p)//求解x,a^x%p=b%p
{
ll m=sqrt(p)+1; //x=i*m-j
map<ll,ll>M;
ll res=1; //a^0
for(int j=0;j<=m;j++)
{
M[b*res%p]=j;
res=res*a%p;
}
for(int i=1;i<=m;i++)
{
ll k=qpow(a,i*m,p);
if(M.count(k))
return i*m-M[k];
}
}