gcd(exgcd)

声明

  给 x,y 两个数,求 x,y 的最大公因数。

  辗转相除法,直接套!!! 

1 function gcd(x,y:longint):longint;
2 begin
3         if y=0 then exit(x) else exit(gcd(y,x mod y));
4 end;
1 int gcd(int x,int y)
2 {
3         if (y==0) return x; else return gcd(y,x%y);
4 }

  下面给出 exgcd 做法(对于上面的 ax+by=m 来说,我们并不仅仅想要知道有没有解,而是想要知道在有解的情况下这个解到底是多少):传送门

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4  
 5 using namespace std;
 6  
 7 int exgcd(int a,int b,int &x,int &y)//扩展欧几里得算法
 8 {
 9     if(b==0)
10     {
11         x=1;y=0;
12         return a;  //到达递归边界开始向上一层返回
13     }
14     int r=exgcd(b,a%b,x,y);
15     int temp=y;    //把x y变成上一层的
16     y=x-(a/b)*y;
17     x=temp;
18     return r;     //得到a b的最大公因数
19 }
20 ————————————————
21 版权声明:本文为CSDN博主「_Warning_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
22 原文链接:https://blog.csdn.net/destiny1507/article/details/81750874

  同余相关

原文地址:https://www.cnblogs.com/t-s-y/p/10324892.html