主要用来解形如ax+by=gcd(a,b)的线性方程,其中gcd(a,b)表示a和b的最大公约数。利用扩展欧几里得算法可以求得gcd(a,b),同时返回方程的一个解。
若方程的一个解是(x1,y1),则(x1+bk,y1-ak)都是方程的解,其中k是整数。
实现的代码如下:
#include<iostream> #include<cmath> using namespace std; __int64 extended_Euclid(__int64 a, __int64 b, __int64 &x, __int64 &y) { if (b==0) { x = 1; y = 0; return a; } __int64 g = extended_Euclid(b, a%b, x, y); __int64 temp = x; x = y; y = temp - (a / b) * y; //printf("x=%I64d y=%I64d\n", x, y); return g; } int main() { __int64 a, b, x, y; while (scanf("%I64d%I64d", &a, &b)!=EOF) { printf("gcd(%I64d,%I64d)=%I64d\n", a, b, extended_Euclid(a, b, x, y)); printf("answer: x=%I64d y=%I64d\n\n", x, y); } return 0; }