首页 > 其他分享 >二元一次不定方程(Exgcd)(更方便的解法)

二元一次不定方程(Exgcd)(更方便的解法)

时间:2024-11-02 18:57:40浏览次数:3  
标签:方程 二元 dfrac ll Exgcd Delta aligned bmod 解法

扩展欧几里得算法(Exgcd)

裴蜀定理

对于任意一组整数 \(a,b\),存在一组整数 \(x,y\),满足 \(ax+by=\gcd(a,b)\)。

Proof:

考虑数学归纳法。

当 \(b=0\) 时,由于 \(\gcd(a,0)=a\),则对于 \(ax+0y=a\) 这个不定方程,\(x=1\),\(y\) 取任意整数。

假设存在一组整数 \(x,y\),满足 $bx+(a\bmod b)y=\gcd(b,a\bmod b)=\gcd(a,b) $。

那么接下来证明也存在一组整数 \(x',y'\) 满足 \(ax'+by'=\gcd(a,b)\)。

\[\begin{aligned} bx+(a\bmod b)y &= bx+(a-b\lfloor\dfrac{a}{b}\rfloor)y\\ &= bx+ay-b\lfloor\dfrac{a}{b}\rfloor y\\ &= ay+b(x-\lfloor\dfrac{a}{b}\rfloor y) \end{aligned} \]

当 \(x'=y,y'=x-\lfloor\dfrac{a}{b}\rfloor y\) 时满足条件。

那么利用辗转相除法进行递归,总能递归到 \(b=0\) 的情况。命题得证。

Exgcd

求关于 \(x,y\) 的方程 \(ax+by=c\) 的整数解。

设 \(d=\gcd(a,b)\),方程有整数解的充要条件是 \(d\mid c\)。

Proof:

设 \(a=k_1d,b=k_2d\),则有 \(k_1dx+k_2dy=c \Rightarrow k_1x+k_2y=\dfrac{c}{d}\)。

先证必要性: 由于 \(\dfrac{c}{d}\) 必须为整数,则 \(d \mid c\)。

再证充分性:上式中,\(k_1\perp k_2\),则方程 \(k_1x'+k_2y'=1\) 一定有整数解。由于 \(\dfrac{c}{d} \in\mathbb{Z}\),那么原方程也一定有整数解。

先将方程化简,两边同除以 \(d\)。此时 \(a,b\) 互质。

注意,为了方便表述,下面提到的方程都是化简后的方程

那么我们可以先利用裴蜀定理求出 \(ax'+by'=1\) 的一组特解 \(x',y'\),从而求出原方程的一组特解 \(x_0=cx’,y_0=cy'\)。

考虑如何求出通解。

让 \(x\) 加上一个数,那么 \(y\) 就要减去一个数。设这两个数为 \(\Delta_x,\Delta_y\),则有:

\[\begin{aligned} a(x+\Delta_x)+b(y-\Delta_y) &= c\\ ax+a\Delta_x+by-b\Delta_y &= c\\ a\Delta_x-b\Delta_y&=0\\ a\Delta_x &= b\Delta_y \\ \dfrac{a}{b} &= \dfrac{\Delta_y}{\Delta_x} \end{aligned} \]

由于 \(a,b\) 互质,则 \(\dfrac{a}{b}\) 为最简整数比,则有 \(a \mid \Delta_y\) 且 \(\ b\mid \Delta_x\)。

由于 \(\Delta_x,\Delta_y \in \mathbb{Z}\),则 \(\Delta_x\) 最小取到 \(b\),\(\Delta_y\) 最小取到 \(a\)。

通解即为:

\[\begin{cases} x=x_0+kb\\ y=y_0+ka\\ \end{cases} (k\in \mathbb{Z}) \]

代回原方程,可以消掉 \(kb,ka\)。

接下来考虑,当存在正整数解时,如何求出最小正整数解与正整数解的个数。

对 \(x\) 的通解进行变形,求 \(x\) 的最小正整数解 \(x_1\):

\[\begin{aligned} x_1 \bmod b &= (x_0+kb) \bmod b\\ x_1 \bmod b &= x_0 \bmod b\\ x_1&=(((x_0-1) \bmod b)+b)\bmod b+1 \end{aligned} \]

先减一是为了避免 $x_0 \bmod a $ 一开始就为 \(0\) 的情况,从而保证 \(x_1>0\)。

易得,当 \(x\) 增大时,\(y\) 减小。当 \(x\) 取 \(x_1\) 时,\(y\) 取到最大正整数解 \(y_2\)。

同理,求出 \(y\) 的最小正整数解 \(y_1\),当 \(y\) 取 \(y_1\) 时,\(x\) 取到最大正整数解 \(x_2\)。

由通解公式可得,\(x\) 每两个整数解之间相差 \(b\),\(y\) 每两个整数解之间相差 \(a\)。

正整数解的个数即为 \(\dfrac{x_2-x_1}{b}+1\) 或 \(\dfrac{y_2-y_1}{a}+1\)。

Ex.1 【模板】二元一次不定方程 (exgcd)

根据上面的分析,套用公式即可。

ll T,A,B,C,x,y,d,x1,x2,y1,y2,cnt; 

ll GetX(ll Y){return (C-B*Y)/A;}

ll GetY(ll X){return (C-A*X)/B;}

ll Exgcd(ll a,ll b,ll &x,ll &y){
	if(b==0) return x=1,y=0,a;
	ll res=Exgcd(b,a%b,x,y);
	ll z=x;
	x=y;
	y=z-(a/b)*y;
	return res;
}

void Solve(){
	read(A),read(B),read(C);
	d=Exgcd(A,B,x,y);
	if(C%d) return puts("-1"),void();
	A/=d,B/=d,C/=d;
	x*=C,y*=C;
	x1=((x-1)%B+B)%B+1;
	y2=GetY(x1);
	y1=((y-1)%A+A)%A+1;
	x2=GetX(y1);
	cnt=(x2-x1)/B+1;
	if(y2<=0) printf("%lld %lld\n",x1,y1);
	else printf("%lld %lld %lld %lld %lld\n",cnt,x1,y1,x2,y2);
}

Ex.2 [NOIP2012 提高组] 同余方程

对式子进行变形:

\[\begin{aligned} ax &\equiv 1 \pmod{b}\\ ax+by &= 1 \end{aligned} \]

利用 Exgcd 求解即可。

这是非常常用的变形技巧,也是当 \(a,b\) 互质但 \(b\) 不是质数时求逆元的方法。

Ex.3 青蛙的约会

设跳跃 \(k\) 次后两青蛙相遇,则可列出方程:

\[\begin{aligned} x+kn &\equiv y+km &\pmod{L}\\ (x-y)+k(n-m) &\equiv 0 &\pmod{L}\\ (x-y)+k(n-m) &= pL\\ k(n-m)-pL&=y-x\\ kS-pL&=C \end{aligned} \]

其中 \(S,L,C\) 为常数。

把 \(k,p\) 看作未知数,利用 Exgcd 求 \(k\) 的最小正整数解即可。

标签:方程,二元,dfrac,ll,Exgcd,Delta,aligned,bmod,解法
From: https://www.cnblogs.com/XP3301Pipi/p/18522330

相关文章

  • 今日力扣:3226. 使两个整数相等的位更改次数 python3解法
    给你两个正整数 n 和 k。你可以选择 n 的 二进制表示 中任意一个值为1的位,并将其改为0。返回使得 n 等于 k 所需要的更改次数。如果无法实现,返回-1。示例1:输入: n=13,k=4输出: 2解释:最初,n 和 k 的二进制表示分别为 n=(1101)2 和 k=(010......
  • DPaRL:耶鲁+AWS出品,开放世界持续学习场景的新解法 | ECCV'24
    来源:晓飞的算法工程笔记公众号,转载请注明出处论文:Open-WorldDynamicPromptandContinualVisualRepresentationLearning论文地址:https://arxiv.org/abs/2409.05312创新点在开放世界中建立了一种新的持续视觉表征学习的实用设置。提出了一种简单而强大的方法,动......
  • 百度二面算法:合法的括号字符串(贪心解法)
    目录标题1.题目1.1示例2.利用贪心算法求解2.1代码结构分析2.1.1代码优缺点2.1.2星号的角色分析2.1.2.1处理星号的逻辑2.1.2.2整体逻辑2.1.2.3代码逻辑总结2.2贪心的策略体现2.2.1贪心策略的应用1.题目给定一个字符串s,字符串......
  • 线性代数的解法
    线性代数数学的思维方式:graphTBid1(#观察#客观现象)--提出主要研究的问题\n抓住主要特征-->id2(#抽象#出概念或建立模型)id2-->id3(#探索#应用直觉,类比,归纳,联想,推理)id3-->id4(#猜测#可能有的规律)id4-->id5(#论证#深入分析,应用定义,公理,证明过的定......
  • 倍增法 and RMQ 问题的 ST 解法
    什么是倍增?倍增,从字面及数学的角度就是”成倍增长“的意思。这能使线性问题转化为数级处理,优化时间复杂度。不是人话是不是?听不懂是不是?看这里。这是指我们在进行递推时,如果状态空间很大,通常的线性递推无法满足时间与空间复杂度的要求,那么我们可以通过成倍增长的方式,只递推状......
  • 高等数学 7.10常系数线性微分方程组解法举例
    在研究某些实际问题时,会遇到由几个微分方程联立起来共同确定几个具有同一自变量的函数的情况。这些联立的微分方程称为微分方程组。如果微分方程组中的每一个微分方程都是常系数线性微分方程,那么,这种微分方程组就叫做常系数线性微分方程组。对于常系数线性微分方程组,我们可以用......
  • 券后价复杂根源和解法
    券后价领域划分不清楚券后价在电商系统中是个很奇怪的存在无论是按商品领域还是营销领域划分,它都不合适归类到这两者中间。结果就是券后价是个很不理想的拆分逻辑。券后价可以理解是商品的价格属性,这个属性是由营销来计算控制。领域划分可以理解为商品领域,营销做计算!核心承接方......
  • 【小 w 的代数】(提供一种 n^2 log 的解法)
    前言:卖点记录CTH的发言CTH:你这真是n^3的CTH:我也不知道你线段树优化个啥,\(n^3\logn\)CTH:你优化到哪了啊CTH:······你从赛时打这个题到现在11个小时了,你从\(n^3\)打到\(n^3\logn\)了CTH:······再怎么着,我也不会一道题调三天CTH:我一直都说这么打......
  • 基于最速下降法和坐标轮换法求解二元函数的极小点和极小值(附word文档)
    基于最速下降法和坐标轮换法求解二元函数的极小点和极小值(附word文档)......
  • 算法(第4版)练习题 3.3.20 的一种解法
    本文给出了对于《算法(第4版)》(以下简称原书或书)中的练习题3.3.20的一种解法。◆要求原书中的练习题3.3.20要求计算一棵大小为N且完美平衡的二叉查找树的内部路径长度,其中N为2的幂减1。◆解答N为2的幂减1的一颗完美平衡的二叉查找树是一棵满二叉树。在这样的......