扩欧学习笔记

扩欧这玩意儿暑假就学了,但是一直仅限于背 y=,背完就忘,于是搞个学习笔记加深印象。

解方程 ax+by=gcd(a,b)

ax1+by1=gcd(a,b)bx2+(amodb)y2=gcd(b,amodb)

根据欧几里得算法可知,gcd(a,b)=gcd(b,amodb)

所以 ax1+by1=bx2+(amodb)y2

bx2+(amodb)y2=bx2+(aab×b)y2=b(x2aby2)+ay2

a,b 相同,所以 x1=y2,y1=x2aby2

b=0x=1,y=0,递归求解即可。

code:

点击查看代码
int n,m;
int ex_gcd(int a,int b,int &x,int &y){
	if(!b){
		x=1,y=0;
		return a;
	}
	int ret=ex_gcd(b,a%b,y,x);
	y-=a/b*x;
	return ret;
}
void solve(){
	int x,y,ans=ex_gcd(n,m,x,y);
	printf("%d %d %d\n",x,y,ans);
}
signed main(){
	int t=1;
	while(~scanf("%d%d",&n,&m))solve();
}

别问为什么和OI Wiki上的一样,但是我认为自己手打一遍还是记得住的。

posted @   yinhee  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示