int extend_gcd( int a, int b, int &x, int &y ){
if (b == 0){
x = 1; y = 0;
return a;
}
else{
int r = extend_gcd( b, a%b, y, x);
y -= x*(a/b);
return r;
}
}
这个模板 d=exten_gcd( a , b , x , y); 得到的d=gcd(a,b),得到的x,y是a‘x+b’y=1的解;
我要求ax+by=c这个方程的解,要进行以下几个操作。
首先判断 c%d 是否为0,如果不为 0,那么是没有整数解的。
x0=x*c/d;
y0=y*c/d;
这是ax+by=c的特解
a/=d;
b/=d;
c/=d;
x1=(x%b+b)%b;
y1=(c-a*x1)/b;
这是当x为最小正根x1时得到的一组解,这里要注意,当x1为最小正根的时候,y1不一定是最小正根,而且y1可能为负数,要看题目的要求,同理当y为最小正根时:
y2=(y%a+a)%a;
x2=(c-b*y2)/a;