收藏 分享(赏)

如何求解二元一次不定方程的整数解.doc

上传人:qcjlxh 文档编号:6105366 上传时间:2019-03-27 格式:DOC 页数:2 大小:25.50KB
下载 相关 举报
如何求解二元一次不定方程的整数解.doc_第1页
第1页 / 共2页
如何求解二元一次不定方程的整数解.doc_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

1、如何求解二元一次不定方程的整数解这里讨论的二元一次不定方程专指 ax+by=c(a*b0,a,b,cZ)-定理一:方程有整数解的充分必要条件是(a,b)|c(a,b)即 Gcd(a,b),下同)定理二(裴蜀定理)设(a,b)=1,则方程的全部整数解可表为:x=x0+bt,y=y0-at(x0,y0 是方程的一组整数解,t 为任意整数)也可以表述为:方程的全部整数解可表为:x=x0+bt/(a,b),y=y0-at/(a,b)(x0,y0 是方程的一组整数解,t 为任意整数)我以前的一个想法是求出(a,b)并判断是否(a,b)|c,然后约简 a,b,c(都除以(a,b),这样(a,b)=1,如果

2、方程有整数解的话,根据定理二,在一个长度为|b|的整数范围内必存在一个x 的解,在一个长度为|a|的整数范围内必存在一个 y 的解。那么在 x 的0,|b|-1或者 y 的0,|a|-1上试解吧,找到 x0 可以求出 y0,找到 y0 可以求出 x0。为了减少搜索次数,我们先比较|a|和|b|,如果|a|b|就在 y 上试解,反之则在 x 上试解。我用这种办法 ac 了sgu106 和 poj1061,但是这种办法的代价并非是最低的,因为有一个著名的欧几里德扩展算法。这个算法源自于求 gcd 的欧几里德算法,二者的算法复杂度基本上是一样的。回忆一下欧几里德算法:有两个数 a,b,我们把它们写成

3、 u0 和 u1,求 gcd 的步骤如下:u0=q0*u1+u2u1=q1*u2+u3u2=q2*u3+u4.uj=qj*u(j+1)u(j+1)便是 a 和 b 的最大公约数。要求出一组整数解,可以先求出 ax+by=(a,b)的一组解 x0,y0,然后 x0=x0*c/(a,b),y0=x0*c/(a,b).同样地,把 a 和 b 写成 u0 和 u1,设 ui=u0*xi+u1*yi(必然存在这样的 xi 和 yi,因为 uj 是gcd(u0,u1)的倍数),那么 x0=1,y0=0,x1=0,y1=1;u(i+1)=u(i-1)-q(i-1)*ui=u0*x(i-1)+u1*y(i-1)-q(i-1)*u0*x(i)-q(i-1)*u1*y(i)=u0*(x(i-1)-q(i-1)*x(i)+u1*(y(i-1)-q(i-1)*y(i),而 u(i+1)=u0*x(i+1)+u1*y(i+1),因此x(i+1)=x(i-1)-q(i-1)*x(i)y(i+1)=y(i-1)-q(i-1)*y(i)伟大的递推式!我们要求的是 xj 和 yj(uj=u0*xj+u1*yj,uj 为 gcd),所以只要递推到 xj 和 yj 即可。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 职业教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报