扩展欧几里德算法
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

浙公网安备 33010602011771号