扩展欧几里得模板
int e_gcd(int a, int b, int& x, int& y){
if(b == 0){
x = 1;
y = 0;
return a;
}
int ans = e_gcd(b, a%b, y, x);
y -= x*(a/b);
return ans;
}
返回值为gcd(a,b),用于计算a*x+b*y==gcd(a,b)的通解
x=x0+b/gcd(a,b)*t;
y=y0-a/gcd(a,b)*t;
最小解:
am=a/gcd(a,b),bm=b/gcd(a,b);
x=((x%bm)+bm)%bm;
y=((y%am)+am)%am;
保证是正数,x,y只能计算一个最小解,另一个看对方值计算
求模的逆元

这里x是a相对于m的逆元
公式a*x+m*y==1; //需要gcd(a,m)==1
求得x做最小解可得逆元