欧几里德扩展方程 详解
来源:互联网 发布:建材软件 编辑:程序博客网 时间:2024/05/03 05:20
作用:
欧几里德扩展方程是用来求解二元一次线性方程的。ax+by=c
(a、b、c为已知数)
对于给定方程:
ax+by=c,令g=gcd(a,b)
因为a是g的倍数,b也是g的倍数,所以令a=m*g , b=n*g,则:
ax+by=g(m*x+n*y)=c
所得的结果c必然是g的倍数。
当且仅当mx+ny=1时,右边有最小值。而此时mn必定是互质的。
所以我们经常求的最小整数解就是求方程ax+by=gcd(a,b)的解。
解方程步骤:
对于方程
ax+by=gcd(a,b)
由欧几里德算法
gcd(a,b)=gcd(b,a%b)
分别用b和a%b去替换ab,则可以得到一对新的解:x’和y’
bx’+(a%b)y’=gcd(b,a%b)
因为两式右边都相等,所以我们让两式左边相等
ax+by=bx’+(a%b)y’
假设我们的a/b=k余a%b,则a%b=a-kb,那么上式可变为
ax+by=bx’+ay’-kby’
我们让对应项系数相等
x=y’
y=x’+ky’
这里我们可以发现,后一次的结果是由前一次结果决定的
一直化简下去会发现,方程会变成一个特解:
即x=1,y=0的情况。
最后我们再反过来求得最后的xy即可。
代码实现:
//ax+by=gcd(a,b)=cvoid exgcd(int a,int b,int &x,int &y){ if(b==0) { x=1; y=0; return ; } exgcd(b,a%b,x,y); int t=x; x=y; y=t-y*(a/b);}
因为x,y加了引用,所以最后xy的值会在递归后改变,就求得了最后的答案。
0 0
- 欧几里德扩展方程 详解
- 欧几里德&&扩展欧几里德详解
- 【扩展欧几里德】[NOIP2012]同于方程 mod
- 扩展欧几里德算法求不定方程
- 数论,扩展欧几里德算法,同余方程
- 欧几里德算法的扩展-求解不定方程
- HDU 1576 A/B 欧几里德扩展方程
- [OpenJudge-NOI]不定方程求解 扩展欧几里德
- CodeForces 7C(扩展欧几里德解方程)
- 扩展欧几里德求不定方程 hdoj 2669
- uva 12169 扩展欧几里德解不定方程
- 扩展欧几里德解二元一次不定方程
- noip2012同余方程 扩展欧几里德
- 扩展欧几里德算法详解
- 扩展欧几里德算法详解
- 扩展欧几里德算法详解
- 扩展欧几里德算法详解
- 扩展欧几里德算法详解
- 【数据结构与算法】字符串匹配之BF&KMP算法
- 5.python 算术操作符逻辑操作符
- HDOJ1671 Phone List(字典树)
- 八大排序算法(七)归并排序
- Linux 设备驱动模型,I2C驱动,sys文件系统(1)
- 欧几里德扩展方程 详解
- 软件公司如何基业长青
- java使用httpclient简单模拟登陆微信公众开放平台
- 订单管理系统开发小结
- C# StringBuider
- Java中PreparedStatement和Statement的用法区别
- noip1998火车过站 (斐波那契数列)
- 安卓开发之简单的短信操作模块
- python sort和sorted使用详解