扩展欧几里得

来源:互联网 发布:mac 查看剩余空间 编辑:程序博客网 时间:2024/06/06 00:11

扩展欧几里德:



对于gcd(a, b) == d, 存在


a*x+b*y == gcd(a, b);


--->a*x1+b*y1 == gcd (b, a%b);


--->a*x1+b*y1 == b*x2 + a%b*y2


--->a*x1+b*y1 == b*x2 + (a-(a/b)*b)*y2


--->a*x1+b*y1 == a*y2 + b*(x2-(a/b)*y2)



则得:x1 = y2; y1 = x2 - (a/b)* y2 ;


当b==0时,x==1, y==0, 然后递归求解;


void biggcd (LL a, LL b, LL &x, LL &y){///扩展欧几里得    if (!b)    {        x = 1;        y = 0;        return;    }    else    {        biggcd (b, a%b, x, y);        LL tem = y;        y = x - a/b * y;        x = tem;    }}


1 0