算法基础之扩展欧几里得算法

扩展欧几里得算法

  • 核心思想:裴蜀定理 :

    • 算法基础之扩展欧几里得算法_第1张图片

    • 欧几里得算法: 辗转相除法求最大公约数

    • 算法基础之扩展欧几里得算法_第2张图片

      • 传入参数(int a,int b,int &x,int &y)

      • 递归(int b,int a%b,int y,int x) xy换位置 方便计算(推公式)

      •   #include
          #include
          
          using namespace std;
          const int N = 100010;
          
          int exgcd(int a,int b,int &x,int &y)
          {
              if(!b)  //b == 0 说明最深层 有且仅有一种xy取值
              {
                  x = 1 ,y = 0;
                  return a;
              }
              else
              {
                  int d = exgcd(b, a % b , y , x);  //递归
                  y -= a/b * x;  //由公式推出来 y的值
                  return d;  //return exgcd();
              }
          }
          
          int main()
          {
              int n;
              cin>>n;
              
              while(n--)
              {
                  int a,b,x,y;
                  scanf("%d %d", &a, &b);
                  exgcd(a,b,x,y);
                  printf("%d %d\n", x,y);
              }
          }
        

你可能感兴趣的:(算法,散列表,数据结构,图论,c++)