扩展gcd以及同余方程ax=b(mod M)

来源:互联网 发布:刷微淘粉丝软件 编辑:程序博客网 时间:2024/05/21 10:19

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