贝祖等式:
a*x + b * y = gcd(a, b) = c
gcd 过程:
gcd(a, b) --> gcd(b, a % b)-->...-->gcd(c, 0) = c
下面设计递归算法:
本层解:
b * x + (a % b)*y = c(*), 设 a = k * b + r
b *x + (a - k * b)*y = c
--> a * y + b *(x-ky) = c
ax + by = c(**)
-->下一层解:x = y;y = x-(ky) (k = a/b)
/*************************************************************************
> File Name: gcdEx.c
> Author:zhangji
> Mail:mrzhangji@outlook.com
> Created Time: Mon 02 Oct 2023 09:43:41 AM
*/
#include<stdio.h>
int gcdEx(int a, int b, int *x, int *y){
if(b == 0){
*x = 1;
*y = 0;
return a;
}
int c = gcdEx(b, a%b, x, y);
int t = *x;
*x = *y;
*y = t - (a / b) * *y;
return c;
}
int main(){
int a, b, c, x, y;
scanf("%d%d", &a, &b);
c = gcdEx(a, b, &x, &y);
printf("%d * %d + %d * %d = %d", a, x, b, y, c);
return 0;
}