扩展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); //返回最小解 }