码迷,mamicode.com
首页 > 其他好文 > 详细

解不定方程ax+by=m的最小解

时间:2014-12-07 00:02:14      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   color   os   sp   on   log   

 

  

  给出方程a*x+b*y=c,其中所有数均是整数,且a,b,c是已知数,求满足那个等式的x,y值?这个方程可能有解也可能没解也可能有无穷多个解(注意:这里说的解都是整数解)?

  既然如此,那我们就得找出有解和无解的条件!

  先给出定理:方程a*x+b*y=c有解,当且仅当 c%gcd(a,b)=0。

  定理的证明很容易,如下:

  证明:

  若c%gcd(a,b)=0,则一定存在一个整数K,有c=K*gcd(a,b), 而我们知道a*x+b*y=gcd(a,b)一定存在解(x1, y1)所以就有K*(a*x1 +b*y1 )  = K*gcd(a,b)------>a*K*x1 +b*K*y1 = c,得出解为:(K*x1 , K*y1 )。定理得证。

 

  那么在a*x+b*y=c有解的情况下如何求解呢?

  

  由上可知,a*x+b*y=c a*x+b*y=K*gcd(a,b)是等价的。另外a*x+b*y=gcd(a,b)的一组解为 x1, y1。

  令a1=a/gcd(a,b), b1=b/gcd(a,b),c1=c/gcd(a,b).

  综上,我们可以得出x,y的一组解就是x1*c1, y1*c1(实际上这个解我们在上面的证明定理的过程中就可以得出这组解,只是我们要的是最小解,所以在此处给出),但是满足方程的解有无穷多个,在实际的解题中我们常常只要求其最小解。现以求x的最小解为例,至此我们已经求的一组解使得满足方程a*x+b*y=m,那么a*(x+n*b)+b*(y-n*a)=m显然也成立。可知x+n*b(n=....-2,-1,0,1,2....)就是方程x解集。存在一个k使得x+k*b>0,x的最小解就是(x+k*b)%b.若我们将方程两边同时除以gcd(a,b),则方程变为a1*x+b1*y=c1,同上分析可知。x的最小值就是(x+k*b1)%b1,由于b1<=b,故这个值定会小于等于之前我们认为最小值。在实际求解时常用while(x<0) x+=b来使得为正的条件满足。

 

  另外给出所有解得公式,若bubuko.com,布布扣bubuko.com,布布扣是该方程的一组整数解,那么该方程的所有整数解可表示为bubuko.com,布布扣.

 

 

参考资料:百度百科

     http://www.cnblogs.com/void/archive/2011/04/18/2020357.html

解不定方程ax+by=m的最小解

标签:style   blog   http   ar   color   os   sp   on   log   

原文地址:http://www.cnblogs.com/khan724/p/4148954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!