A*m+B*n=D问题的数学推导求解
流浪狗 2006.3
正整数m,n,求m与n的最大公约数问题是一个算法入门的题目。但是要求解两个整数A和B,使得A*m+B*n=D,D是m,n的最大公因数。求解最大公约数的问题可以表示如下:
1) 输入正整数m,n
2) 令r=m%n;
3) 判断r是否等于0,如果等于0,则结束
4) 令m=n; n=r;转到(2)
5) 输出n
而要求解A*m+B*n=D的问题,令
a'*m+b'*n=c,
a*m+b*n=d
在程序运行过程中始终成立,则
1) 输入m,n
2) 令a'=b=1,a=b'=0,c=m,d=n;
3) 令q=c/d;r=c%d;
4) 判断r是否等于0,如果等于0,则结束
5) 交换值,怎样交换?转向(3)
具体怎样交换呢?我们可以通过数学推倒来确定。
已知条件为
ck+1=dk,
dk+1=rk,
rk+1=ck+1%dk+1
因为
a’k*m+b’k*n=ck,
ak*m+bk*n=dk
所以
a’k+1*m+b’k+1*n=ck+1=dk= ak*m+bk*n
由于a’k+1,b’k+1,ak,bk都是整数,故有
a’k+1=ak; b’k+1=bk; ……………………………………….(1)
又
ak+1*m+bk+1*n=dk+1=rk= ck% dk= ck-q* dk
→ak+1*m+bk+1*n=a’k*m+b’k*n-q*( ak*m+bk*n)
→ak+1*m+bk+1*n=( a’k-q* ak)*m+( b’k-q* bk)
故有
ak+1= a’k-q* ak; bk+1= b’k-q* bk………………………..(2)
由(1)(2)可以得出第5步的具体算法:
c=d; d=r;
t=a’;
a’=a;
a=t-q*a;
t=b’;
b’=b;
b=t-q*b;