C++ 程序实现扩展欧几里得算法

c++server side programmingprogramming

扩展欧几里得算法只是计算两个数字的 GCD 的另一种方法。它有额外的变量来计算 ax + by = gcd(a, b)。在计算机程序中使用效率更高

算法

开始
    声明变量 a、b、x 和 y
    gcdExtended(int a, int b, int *x, int *y)
    if (a == 0)
        *x = 0;
        *y = 1;
    返回 b;
    取两个变量来存储结果
    使用递归调用的结果更新 x 和 y
结束

示例代码

#include <bits/stdc++.h>
using namespace std;
int gcdExtended(int a, int b, int *x, int *y) {
   if (a == 0) {
      *x = 0;
      *y = 1;
      return b;
   }
   int x1, y1;
   int gcd = gcdExtended(b%a, a, &x1, &y1);
   *x = y1 - (b/a) * x1;
   *y = x1;
   return gcd;
}
int main() {
   int x, y;
   int a = 35, b = 15;
   cout<<"gcd "<<gcdExtended(a, b, &x, &y);
   return 0;
}

输出

gcd 5

相关文章