浅谈Exgcd(扩展欧几里得)
Posted h-lka
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈Exgcd(扩展欧几里得)相关的知识,希望对你有一定的参考价值。
我们已知,求最大公约数的方法:
求A,B两数的最大公约数,递归求解,递归边界是B==0.
gcd(a,b)=gcd(b,a%b)
我们进一步来求Ax+By=Gcd(A,B)的解。
尝试套用欧几里得求法?
我们希望,有整数X,Y,使得:
bX+(a%b)Y=Gcd(a,b).
那么我们有:
bX+(a-a/b*b)Y=Gcd(a,b).
整理上式得:aY+b(X-a/bY)=Gcd(a,b)
这个式子可以提公因式,展开括号得到。
那我们就可以递归求解了。
代码:
inline void Exgcd(LL a,LL b,LL&d,LL &x,LL &y) if(!b)d=a;x=1;y=0; else Exgcd(b,a%b,d,x,y); LL t=x;x=y;y=t-(a/b)*y;
代码告一段落。例题:
例题1:同余方程
例题2:青蛙的约会
以上是关于浅谈Exgcd(扩展欧几里得)的主要内容,如果未能解决你的问题,请参考以下文章