拓展欧几里得算法
裴蜀定理:
对任意的a,b,有 a*x+b*y = gcd(a,b);
当b=0,有 gcd(a,b) = a;
当b≠0:
b*y + (a - [a/b]*b)*x = gcd(a,b);
b*y + a*x - [a/b]*b*x = gcd(a,b);
a*x + b*(y-[a/b]*x) = gcd(a,b);
发现,x 不变, y -= [a/b]*x;
模板:
int exgcd(int a, int b, int &x, int &y) { if(!b) { x = 1, y = 0; return a; } int d = exgcd(b, a % b, y, x); y -= a/b*x; return d; }