扩展欧几里德算法

2017-10-27  

数论

扩展欧几里德算法属于数论里面的知识,是根据欧几里德算法改编过的。

欧几里德算法就是就求两个整数的最大公约数,使用的是辗转相除法。

代码如下: 

 

扩展欧几里德算法是在已知系数a、b的情况下,求x、y的解,它们满足贝祖公式:

  ax + by = gcd(a, b) = d.

修改后的代码如下:

 1 void gcd(int a, int b, int &d, int &x, int &y){
 2     if (!b){
 3         d = a;
 4         x = 1;
 5         y = 0;        
 6     } else {
 7         gcd(b, a % b, d, y, x);
 8         y -= x * (a / b);    
 9     }         
10 }

 

证明如下:

 

 

 

这是今天我在codeforces刷题时遇到的一道题目,所以就查了一些资料,感觉收获良多。

题目链接:7C.Line     

http://codeforces.com/problemset/problem/7/C

posted @ 2017-10-27 20:55  你好,果果  Views(144)  Comments(0)    收藏  举报