Gcd函数,gc的算法

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: