Gcd函数,gc的算法
高莱斯算法(gcd),也称为相间除法,用于计算两个整数A和b的最大公约数。
基本思想:设a=qb r,其中A,B,Q,R都是整数,则gcd(a,b)=gcd(b,R),即gcd(a,b)=gcd(b,a%b)。
代码(python):
[python]查看普通副本def gcd (a,b):IFB==0:return LSE:return gcd(b,a% b)扩展欧几里德算法(egcd):
基本思想:对于不全为0的非负整数A,B,gcd(a,B)表示A,B的最大公约数,必须有一个整数对X,Y,使得gcd(a,b)=ax by。
证明:设定ab。
1,显然当b=0时,gcd(a,b)=a .此时x=1,y=0;
2,ab!=0
Set ax1 by1=gcd(a,b);
bx2 (a mod b)y2=gcd(b,a mod b);
根据高米的简单原理,gcd(a,b)=gcd(b,a mod b);
那么:ax1 by1=bx2(a mod b)y2;
即ax1by1后面的枫叶=bx2(a-(a/b)* b)y2=ay2bx2-(a/b)*;
根据恒等式定理:x1=y2y1=x2-(a/b)* y2;
这样我们就得到求解x1,y1的方法:x1,y1的值是基于x2,y2的。
上面的思路是用递归来定义的,因为gcd的连续递归解中一定有b=0的时刻,所以递归可以结束。
代码(python):
[python]查看普通副本Defe GCD (a,b): IFB==0:返回1,0 else: x,y=EGCD (b,a% b)返回,x-a/b * y要理解代码,关键在于知道x,y递归关系的推导过程。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。