扩展GCD

本文详细介绍了扩展欧几里得算法的原理及其应用,包括算法的模板代码、推导过程、证明方法以及如何求解更一般的线性方程组。此外,还列举了一些与该算法相关的典型题目。

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

a*x+b*y=d,d=gcd(a,b).

模板代码:

void exgcd(int a,int b,int& d,LL &x,LL &y){
	if(b==0){
		d=a;
		x=1;y=0;
		return;
	}
	exgcd(b,a%b,d,y,x);
	y-=a/b*x;
}



-----取自小白
  • 算法推导及证明:

,当时,,此时,否则设

 

     

 

由于,所以进一步得到

 

     

 

所以得到

 

                   

证明过程来自 acdream的博客,orz。
详见算导(第二版)528;具体数学86。
  • 其它解:
a*x1+b*y1=a*x2+b*y2     ---->
a*(x1-x2)=b*(y2-y1)      ------>
a/d*(x1-x2)=b/d*(y2-y1)  --------------->
a/d,b/d互质 -------------->
x1-x2=k*(b/d),y2-y1=k*(a/d) --------------->
x=x0+b/d*k,y=y0-a/d*k,k为任意整数。
  • 性质:
  1. a*b!=0,|x|<=b且|y|<=a。
  • 与扩展GCD有关的算法:
  1. 中国剩余定理
  • 相关的题目:
  1. poj1061,2115。
  2. poj2142
  3. hoj2815
  4. uva10673
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值