返回信息流感觉很有意思[ema3],求最大公约数g的同时,求出ax+by = g的整数解x,y
扩展欧几里德算法
欧几里德辗转相除法的基本原理:gcd(a,b)=gcd(b,a%b)
所以: ax + by = g //g=gcd(a,b)
==> bx’ + (a%b)y’ = g
==> bx’ + (a-a/b*b)y’ = g
==> ay’ + b(x’-a/b*y’) = g
==> x=y’、y=x’-a/b*y’ //迭代式
根据迭代式,可以在欧几里德辗转相除法求 a,b 的最大公约数时,同时计算 ax+by=g 的一
个整数解!
int gcd(int a,int b)
{
if(b==0) returen a;
int g=gcd(b,a%b);
return g;
}
int exgcd(int a,int b,int &x,int &y)
{
if(b==0) { x=1; y=0; return a;} // g*1=g
int xx,yy;
int g=exgcd(b,a%b,xx,yy);
x=yy;
y=xx-(a/b)*yy;
return g;
}
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #95432同步于 2018/4/3
ACM_ICPC机器人发帖
【讨论】扩展欧几里得算法
w1252675615
2018/4/3镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。