exgcd

参考博客

exgcd:

Bézout 对于任意整数 a,b 存在一堆整数 x,y 满足 ax+by=gcd(a,b)

gcd 最后当 b=0 时,显然 x=1,y=0 满足 a×1+0×0=gcd(a,0)

b>0 ,则 gcd(a,b)=gcd(b,a mod b) 假设有 x,y 满足 bx+(amodb)y=gcd(b,amodb)

bx+(amodb)y=bx+(abab)y=ay+b(xaby)

x=y,y=xaby 可得 ax+by=gcd(a,b) 成立。

其通解可表示为 x=x0+kb,y=y0ka

模板:

代码
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);
	int z = x;
	x = y;
	y = z - (a/b)*y;
	return d; // 返回值是 gcd(a, b); 
} 

对于一般的方程 ax+by=c ,当且仅当 dc (d=gcd(a,b) ) 时有解。

可以先求出 ax+by=d 的解 x0,y0 易得 ax+by=c 的解为 (c/d)x0,(c/d)y0

其通解可表示为 x=cdx0+kbd,y=cdy0kad

 

求逆元:ax1(modp)x

ax1(modp),gcd(a,p)=1

ax=1+py

ax+p(y)=1

使用 exgcd 求得 x 即可。

 

posted @   programmingysx  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示