扩展gcd以及同余方程ax=b(mod M)
关于扩展gcd其实没有必要搞懂,背下来就好了如果不会的自行学习
对于方程ax=b(mod M),我们可以将其化简成为ax+My=b,让后用扩展gcd求解
当b|r=gcd(a,M)时,方程有r个解,否则无解,对于有解的情况,每个解为用gcd求出的x乘上b/r+k*(M/r)
int extgcd(int a,int b,int& x,int& y){
if(b){
int r=extgcd(b,a%b,y,x);
y-=x*(a/b); return r;
} else { x=1; y=0; return a; }
}
int solve(int a,int b,int M){
int x,y,r=extgcd(A,M,x,y);
if(B%r) return -1; else x=(x+M)%M*b/r;
// return x; 这个是返回通解
return x%(M/r); //返回最小解
}