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