引入
BSGS算法,原名Baby Steps Giant Steps,又名大小步算法,拔山盖世算法,北上广深算法——by SLYZoier,数论基本算法之一。
问题
题解
讨论
转自 大佬博客
【bsgs模板代码】
map<ll,ll> vis;
ll bsgs(ll a,ll b,ll p)//求解x,a^x%p=b%p
{
vis.clear();
ll m=ceil(sqrt(p));
ll res=b%p;
for(int i=0;i<=m;i++)
{
vis[res]=i;
res=res*a%p;
}
ll k=qpow(a,m,p);
ll temp=k;
for(int i=1;i<=m;i++)
{
if(vis[temp]) return m*i-vis[temp];
temp*=k;temp%=p;
}
return -1;
}