【模版】exgcd,BSGS
微调了两个高中写的板子发一下
void exgcd(int a,int b,int& d,int& x,int& y) //ax+by=d
{
if(b==0) {d=a;x=1;y=0;return;}
exgcd(b,a%b,d,y,x); y-=x*(a/b);
}
int long_mod(int a,int b,int n) // a^ans=b (mod n)
{
int m,v,e=1;
m=(int)sqrt(n+0.5);
v=inv(pow_mod(a,m,n));
map<int,int>x;
x[1]=0;
for(int i=1;i<m;i++){
e=e%n*a%n;
if(!x.count(e)) x[e]=i;
}
for(int i=0;i<m;i++)
{
if(x.count(b))
return i*m+x[b];
b=b%n*v%n;
}
return NO_SOLUTION;
}
25.10.14补充:
从关联性上讲,毛队写了一个模数不保证是质数,但与底数互质的板子题,我测了一下发现这个东西出了问题,但是实际没问题,逆元用exgcd就好了。
另外就是跑到根号的范围,显然大一点没事。保证覆盖吧。

浙公网安备 33010602011771号