//接口:log(a,b,n) log 以a为底,b的对数,余数是n。不存在返回-1
LL log_mod (LL a,LL b,LL n)
{
LL m,v,e=1,i;
m=(LL)sqrt(n+0.5);
v=inv(get_inv(a,m),n);
map<int,int>x;
x[1]=0;
for(i=1; i<m; i++)
{
e=(e*a)%n;
if(!x.count(e))x[e]=i;
}
for(i=0; i<m; i++)
{
if(x.count(b))return i*m+x[b];
b=(b*v)%n;
}
return -1;
}
模的情况下取log模板
最新推荐文章于 2024-09-12 19:02:20 发布