码迷,mamicode.com
首页 > 其他好文 > 详细

浅谈Exgcd(扩展欧几里得)

时间:2019-07-19 21:12:51      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:span   进一步   展开   整数   最大   ==   amp   例题   欧几里得   

我们已知,求最大公约数的方法:

求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(扩展欧几里得)

标签:span   进一步   展开   整数   最大   ==   amp   例题   欧几里得   

原文地址:https://www.cnblogs.com/h-lka/p/11215551.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!