扩展欧几里德算法
来源:互联网 发布:old town coffee淘宝 编辑:程序博客网 时间:2024/05/02 04:18
- 遇见这道题,对求最大公约数又有了新的认识
欧几里得问题
int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a%b);}
扩展欧几里得问题
- 对于ax + by = c; 在 c % gcd(a,b) = 0的时候,我们一般先求 a/gcd(a,b) x + b/gcd(a,b) y = 1的解,然后在扩大c倍,就是原问题的解。当然c % gcd(a,b) != 0 的时候,原问题无解。
- 根据下面参考文献中的原理,我们可以得到下面的程序:
#include<iostream>using namespace std;void gcd(int a, int b, int &d, int &x, int &y) { if (!b) { d = a; x = 1; y = 0; }else { gcd(b, a%b, d, y, x); y -= x*(a/b); //*** }}int main() { int a, b, d, x, y; a = 6; b = 15; gcd(a, b, d, x ,y); cout << x << " " << y << " " << d;}
- 对于程序中加*号的地方,我的理解:
- 由参考文献可知,x1 = y2; y1 = x2 - a/b * y2; 因为经过了一步,gcd(b, a%b, d, y, x); 所以 此时的 y = x2; x = y2; 所以根据将 y1 公式翻过去就是 y = y - x *(a/b);
参考
- http://blog.csdn.net/rising_fallmoon/article/details/10724239(这个是推导过程)
阅读全文
0 0
- 欧几里德算法 & 扩展欧几里德算法
- 欧几里德和扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德算法及扩展欧几里德
- 欧几里德与扩展欧几里德算法
- 欧几里德和扩展欧几里德算法
- HDU
- poj1611 The Suspects 并查集_小优化
- 使用RancherServer:v1.6.12部署K8S-v1.8.3
- LDAP入门
- 第十五周训练总结(一)
- 扩展欧几里德算法
- Circular Buffer of Raw Binary Data in C++
- 如何处理僵死进程?
- Linux虚拟机:Centos详细安装及配置步骤
- P1008 ——1:2:3数字组合
- “配置”也有架构演进?看完深有痛感
- [NLP-文章中心句提取]可以阅读理解当中
- 项目&产品
- C++实现选择排序