欧几里得算法和扩展欧几里得算法

本文详细介绍了二元一次不定方程的解法及其与最大公约数的关系,并通过欧几里得算法证明了求解过程。同时,还解释了扩展欧几里得算法用于求解特定形式的线性方程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二元一次不定方程的一般形式为ax+by=c。其中 a,b,c 是整数,ab ≠ 0。此方程整数解的充分必要条件是a、b的最大公约数整除c

欧几里得算法的证明:

aa=kb+rabkra>b 
r=amodb 
da,b便d=(a,b) 
d|a,d|babd。 
r=akb 
d 
r/d=a/dkb/d 
d|a,d|bd|r 
drda,b,rd=(a,b,r) 
A(a,b)B(b,r)R(a,r) 
AB,AR

(a,b)(b,r) 
(a,b)(b,r)(a,r)

d(b,r)d|b,d|r a=kb+rd, 
a/d=(kb+r)/d=kb/d+r/d d|b,d|r d|a 
d=(b,r),a=kb+rdad=(a,b,r) 
(b,r)(a,b)(a,r) BABRA=B 
(a,b)(b,r) 即 
            gcd(a,b)=gcd(b,r)

可见必须要满足两个条件才能得到(a,b)的公约数与(b,r)的公约数是相同的结论。 
条件一:

假设d=(a,b),那么在a=qb+r的情况下,有 d=(b,r) 
AB

条件二:

假设d=(b,r),那么在a=qb+r的情况下,有 d=(a,b) 
BA

扩展欧几里得算法的说明:

扩展欧几里德算法是用来求解a*x+b*y==gcd(a,b)这样的方程的。同样利用gcd(a,b)==gcd(b,a%b)把a*x+b*y==gcd( a, b )转化为b*x'+(a%b)*y'==gcd( b, a%b );

根据递归的思想,假设现在我们已经求出了x' y',剩下的关键就是如何用x' y'求出x y.我们观察gcd(b,a%b) = b*x'+(a%b)*y',只要把右边重新写成 a*x+b*y 的形式就行了,所以需要对b*x'+(a%b)*y'进行变形,因为a%b == a-a/b*b,故b*x'+(a%b)y' = b*x'+(a-a/b*b)y' == a*y' + b*(x'-a/b*y') .

这样便可得出 x = y' y = x'-a/b*y'。

 这样我们就得到了方程的解 :

x==x0+b*t;    //    特解+通解

y==y0+a*t;

然后再看一般形式 a*x+b*y==c;

当且仅当 c%gcd( a,b )==0时方程才有解。

a*x+b*y==c的求解可以先求出a*x+b*y=gcd(a,b),然后将x y扩大c/gcd(a,b)倍就可以了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值