【模版】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就好了。
另外就是跑到根号的范围,显然大一点没事。保证覆盖吧。

posted @ 2025-08-23 09:31  Astral_Plane  阅读(4)  评论(0)    收藏  举报