经典问题:
已知整数 a , b , c a,b,c a,b,c求整数 x , y x,y x,y使得 a x + b y = c ax+by=c ax+by=c
有解情况: g c d ( a , b ) ∣ c gcd(a,b)\ \ |\ \ c gcd(a,b) ∣ c
通过 e x g c d exgcd exgcd求出 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b)的一组解为 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)
则 a x + b y = c ax+by=c ax+by=c的通解
( x , y ) = ( x 0 ∗ c d + k ∗ b d , y 0 ∗ c d − k ∗ a d ) (x,y)=(\frac{x_0*c}{d}+\frac{k*b}{d},\frac{y_0*c}{d}-\frac{k*a}{d}) (x,y)=(dx0∗c+dk∗b,dy0∗c−dk∗a)
其中, k k k是任意整数, d = g c d ( a , b ) d=gcd(a,b) d=gcd(a,b)
void exgcd(int a,int b,int &gcd,int &x,int &y) {//求解ax+by=gcd(a,b)
if(b==0) {
x=1;y=0;gcd=a;return ;
}
exgcd(b,a%b,x,y);
ll ret=x;x=y;y=ret-a/b*y;
}