扩展欧几里得算法
来源:互联网 发布:网站刷流量软件 编辑:程序博客网 时间:2024/06/04 08:10
问题描述:
求解二元一次方程ax+by=c。
问题分析:
上述的二元一次方程可以用同余方程来进行描述:ax≡cmod(b)
两个问题可以进行转换,但是都可以用扩展的欧几里得算计来解决。
首先关于欧几里得算法(也叫做辗转相除法),可以查看我的另外一篇文章:
http://blog.csdn.net/yi_ming_he/article/details/72084826
下面就来说说如何用扩展欧几里得算法求解二元一次方程。
首先,对于a0x+b0y=gcd(a0,b0)
如果我们另a0=b, b0=a%b=a-(a/b)*b
把它带入原方程:bx+(a-a/b*b)y=gcd(b, a%b)=gcd(a,b)
然后我们稍微变一下,把a和b提取出来,就变成:ay+b(x-a/b*y)=gcd(a,b)
可以看到,这个地方已经和辗转相除法联系起来了
因此只需要用x=y, y=x-a/b*y进行迭代就可以求出一组可行的解了(如果解存在的话)
另外:对于ax+by=c有整数解的充分必要条件是c%gcd(a,b)==0
我们先用扩展欧几里得算法求出a0x+b0y=gcd(a0,b0)一组解(x0,y0),然后两边同时乘以c/gcd(a,b),就得到了原方程ax+by=c的一组解。
此外,如果gcd(a,b)=1, ax+by=c的一组解为(x0,y0),那么该方程的统计为x=x0+bt,y=y0-at(其中t为任意整数),这样我们就可以求出这个方程的所有解。
但是如果我们想求的是这个方程的x的最小正整数解,我们只需要另t=b/gcd(a,b),x=(x%t+t)%t
如果此时x为正数,那结果就是它了,如果此时x为负数那再加一个t的绝对值就可以了
既然x的结果求出来了,那么把x带入方程就可以求出y值了。
- 欧几里得算法&&扩展欧几里得算法
- 欧几里得算法/扩展欧几里得算法
- 欧几里得算法&&扩展欧几里得算法
- 欧几里得、扩展的欧几里得算法
- 欧几里得及欧几里得扩展算法
- 欧几里得、扩展的欧几里得算法 .
- 欧几里得与扩展欧几里得算法
- 欧几里得和扩展欧几里得算法
- 欧几里得和扩展欧几里得算法
- 欧几里得算法及扩展欧几里得
- 欧几里得和扩展欧几里得算法
- 欧几里得, 扩展欧几里得算法模板
- 欧几里得算法及其扩展
- 扩展的欧几里得算法
- 扩展的欧几里得算法
- 欧几里得扩展算法
- 扩展欧几里得算法
- 扩展欧几里得算法
- 全排列字典数
- centos 7.x 防火墙
- 从大方向看操作系统及操作系统核心概念
- C#winForm窗体自适应改进
- 高精度数据问题
- 扩展欧几里得算法
- css三大特性继承、层叠和优先级(权重)
- Linux服务器端的JavaWeb项目路径正确报404
- git 分支 && github
- 数据库系统概论期末考试卷【详解】
- 纪念monaway的第一篇博客
- android布局属性
- Android开发小技巧收集
- iOS学习之 plist文件的读写