扩展欧几里得的应用(超详细求逆元求解方程)

扩展欧几里得算法:

1.扩展欧几里得算法可以求逆元

2.扩展欧几里得算法可以求类似 ax+by=m, 的所有整数解,当m%gcd(a,b)==0 则ax+by=m有无线多个解,否则无解

 

扩展欧几里得的基础式 ax+by=gcd(a,b)  下面会用到这个式子  

下面我会给出这个基础式的模板

 

扩展欧几里得算法求逆元:

刚开始值知道这个算法可以求解逆元,

逆元的定义:ax\equiv1(mod b) (注意gcd(a,b)==1的时候才能保证a的逆元是x\rightarrowax%b=1\rightarrowax-by=1(是不是和上面的基础式差不多)就是一样的。用模板回溯找到x不就是a 的逆元了吗?

现在给出模板吧  这个模板只能求形如ax+by=gcd(a,b)的式子

相关的解释会在代码中解释;

code:

ll exgcd(ll a,ll b,ll &x,ll &y){
	if(b==0){//递归到终点 ax+by=gcd(a,b)=a 此时a就是 最大公约数 
		x=1;//把x=1 ,y=0带入发现满足 
		y=0;
		return a;
	}
	ll r=exgcd(b,a%b,x,y);
	//回溯 (一般都是在递归的后面)回溯是因为要求原方程ax+by=gcd(a,b)的解 
	ll temp=x;//这个证明会在下面给出解释 
	x= y; 
	y=temp-(a/b)*y; 
	return r; 
} 

这个是上面回溯的解释:

上层的式子 ax1+by1=gcd(a,b);
下层的式子 bx2+a%by2=gcd(b,a%b);
我们要求的是上层的x y
gcd(a,b)=gcd(b,a%b);
所以
ax1+by1=bx2+a%by2
ax1+by1=bx2+(a-(a/b)*b)y2
因此 
ax1=ay2
by1=b(x2-(a/b)y2)
 

出了exgcd求逆元还有 费马小定理 ,和递推求逆元 

请大家看这个博客(非常详细):

https://blog.csdn.net/qq_44797733/article/details/103037510?

扩展欧几里得求解ax+by=m的式子(m%gcd(a,b)==0)

这个式子有解的前提:m%gcd(a,b)==0  ;

然后就是这个方程如果没有对x和y有范围上的要求的话是有无线的解的

我们通过上面的模板可以求解出 ax+by=gcd(a,b)的一个特解 x y 然后等式俩边同时乘以m/gcd(a,b) 那么是不是就变成了ax+by=m的式子 ,此时的x和y也是乘过m/gcd(a,b)的,即此时x y是ax+by=m 的一个特解

现在的问题是怎么求其他的解:

我们让式子 ax+by=m 中   x+b/gcd(a,b)  y-a/gcd(a,b) 代入式子得 ax+a*b/gcd(a,b)+by-a*b/gcd(a,b)=m 这里是不是ax+by=m了 相当于这个式子加一个a,b 的最小公倍数 然后又减去一个最小公倍数 。

要是x,y没范围的话就可以求解的个数了。没错是这样的。。。。

接下来给大家分享一个相关的题目:Modified LCS

这里是题解:

https://blog.csdn.net/qq_44797733/article/details/107536436

强烈建议把 逆元的求解 和本篇文章一起看 这样可以更好的学习

 

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值