#include <cstdio>
#include <iostream>
using namespace std;
/*扩展gcd证明
因为当d = gcd(a,b)时;
d = d1 = gcd(b,a%b);
d1 = b1x1 + a%by1;
d = ax+by = b1x1+a%by1,又因为a%b = a - a%b*b;
上式变形可以有
b1x1 + (a-b*a/b)*y1 = a*y1 + b*(x1-a/b*y1);
也就是是说ax+by = a*y1 + b*(x1-a/b*y1);
所以当x=y1,y = x1-a/b*y1时,可以满足有d=ax+by;
*/
int fun(int a,int b,int d,int &x,int &y){
if(b == 0){
x = 1;
y = 0;
return a;
}
else{
d = fun(b,a%b,d,x,y);
int t;
t = x;
x = y;
y = t-a/b*y;
return d;
}
}
int main(){
int a,b,d;
cin >>a >> b >> d;
int x,y;
fun(a,b,d,x,y);
printf("%d %d\n",x,y);
return 0;
}
扩展gcd求解二元不定方程及其证明
最新推荐文章于 2022-08-24 02:00:25 发布