提到扩展欧几里德算法,先简要介绍下欧几里德算法,又称辗转相除法,用于计算两个整数a和b的最大公约数(Greatest Common Divisor(GCD))。扩展欧几里德算法

为证明gcd(a,b)=gcd(b,a mod b),只需证明
  (1)gcd(a,b) | gcd(b,a mod b)
    设d=gcd(a,b) 则d|a且d|b
    a mod b=a-qb (设q=[a/b])
    由d|ax+by 则d|a mod b
    所以d| gcd(b,a mod b)
  (2)gcd(b,a mod b) | gcd(a,b)
    设d=gcd(b,a mod b)
    则d|b且d|a mod b
    a=qb+(a mod b) (q=[a/b])
    得d|a
  所以d|gcd(a mod b)

求解a和b的最大公约数中,a可以表示为kb+r,则r =a mod b,假设d是a和b的一个公约数,则有d|a,d|b,r = a - kb,因此d|r(因为d是a的约数,又是b的约数,所以也是他们的多项式的约数),所以d是(b,a mod b)的公约数。所以在这不断代换中,a 必然>b,每次将a换成b,b换成amod b, a ,b 不断减小。直到b为0时,此时a为他们的最大公约数。

1 int euclid(int a,int b)   
2 {   
3       if (b==0)
4           return a;   
5       else  
6           return euclid(b,a%b);   
7 } 
View Code

相关文章:

  • 2022-12-23
  • 2021-07-06
猜你喜欢
  • 2022-12-23
  • 2021-10-09
  • 2022-02-22
  • 2021-08-26
  • 2022-02-04
  • 2022-12-23
相关资源
相似解决方案