转:

http://www.mscenter.edu.cn/blog/jeffrey/articles/5994.html
http://hi.baidu.com/xknuth/blog/item/491bf9198e26227adab4bded.html
http://www.faq-it.org/archives/structure/0f0aeab192b1e0bdbd84d19d4ab80a28.php

有等式ax+by=c,已知a、b、c,求x和y。  (a、b、c、x、y都是整数)  
uml_practice  
---------------------------------------------------------------  
 
解不定方程ax  +  by  =  n的步骤如下:  
 
(1)计算gcd(a,  b).  若gcd(a,  b)不能整除n,则方程无整数解;否则,在方程的两边同除以gcd(a,  b),得到新的不定方程a'x  +  b'y  =  n',此时gcd(a',  b')  =  1  
 
(2)求出不定方程a'x  +  b'y  =  1的一组整数解x0,  y0,则n'x0,n'y0是方程a'x  +  b'y  =  n'的一组整数解。  
 
(3)根据&@^%W#&定理,可得方程a'x  +  b'y  =  n'的所有整数解为:  
x  =  n'x0  +  b't  
y  =  n'y0  -  a't  
(t为整数)  
这也就是方程ax  +  by  =  n的所有整数解  
 
利用扩展的欧几里德算法,计算(a,  b)和满足d  =  (a,  b)  =  ax0  +  by0的x0和y0,也就是求出了满足a'x0  +  b'y0  =  1的一组整数解。因此可得:  
x  =  n/d  *  x0  +  b/d  *  t  
y  =  n/d  *  y0  -  a/d  *  t  
(t是整数)