exgcd

裴蜀定理

对于任意整数a,b都存在整数x,y,使得ax+by=gcd(a,b)

扩展欧几里得算法(exgcd)

设整数a,b,x,y满足ax+by=gcd(a,b)

b=0,则x=1y取任意整数

b>0

ax+by=gcd(a,b)

=gcd(b,a mod b)

=bx0+(a mod b)y0

=bx0+(aabb)y0

=ay0+b(x0aby0)

所以x=y0,y=x0aby0

于是可以仿照辗转相除法,进行递归求解

代码

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

二元一次不定方程

求不定方程ax+by=c的解,其中a,b,c是正整数

c mod gcd(a,b)0时,方程无整数解

c mod gcd(a,b)=0时,我们可以先求出ax+by=gcd(a,b)的一组解x0,y0

d=gcd(a,b)

方程两边同时乘上cd,就能得到原方程,所以我们可以得到原方程的一组特解为x1=x0cd,y1=y0cd

对于任意kQ ,显然有a(x+kb)+b(yka)=c

于是我们可以得到方程的通解为

x=x1+kb

y=y1+ka

以为我们需要保证x,y是整数,即保证ka,kb是整数,所以k的最小值为1d

又因为ka,kb显然是ad,bd的倍数,所以设sZ,方程的通解为

x=x1+sbd

y=y1sad

同余方程

给定形如axb (mod m)的方程,求方程的解

将原同余方程变为二元一次方程

ax+ym=b

按照上面二元一次不定方程的解法,即可得到同余方程的解

posted @   RYANGSJ  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示