详解扩展gcd

什么是扩展gcd

  • ax+by=gcd(a,b),a,b不全为0,且x,y都为整数解,求解

来了解一下什么是贝祖定理

因为gcd(a,b)=d,那么对于任意的ax+by都等于d的倍数,则一定有解使得ax+by=d

所以可以得出若ax+by=d,则d%gcd(a,b)=0


推导过程

在这里插入图片描述
举个栗子理解一下关于整数解的问题
比如36和24得最大公约数为12
那么gcd(36,24)=12,则它的整数解有1*36+(-1)*24=12,
则当x=1,y=-1时,有ax+by=gcd(a,b),

当然整数解不止这一对


再举个例子理解一下推导过程与代码步骤意思
比如36和24
36 * x+24 * y=gcd;
36 / 24=1……12;此时,x=1,y=-1;

24 * x+12 * y=gcd;
24 / 12=2……0;此时,x=1,y=-1;

12 * x+0 * y=gcd;此时,x=1,y=0;

然后可以根据x=1,y=0,向上推,利用x1=y2与y1=x2-a/b*y


板子

ll exgcd(ll a, ll b, ll &x, ll &y)  
{    
	if(b == 0)    
	{        
		x = 1;
	        y = 0return a;    
         }    
         ll d = exgcd(b, a % b, x, y);    
         ll t = x;    
         x = y;    
         y = t - (a / b) * y;    
         return d;
}
注释:return a与return d是两个数的最大公约数

若要求最小正整数

	if(x <= 0)
		x = x % b1 + b1;
	else
		x = x % b1;

ps:任意整数和0的公约数是该整数的所有约数
它们的最大公约数为该整数本身
因为0被所有非0整数整除,所以任意非零的整数都是0的约数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值