已知一个方程: ax≡b(mod n),那么可以转化成关于x,y的方程: ax+ny=b。利用裴蜀定理和扩展欧几里得算法可以得到x的最小非负整数解。
模板:
此时calc里的a=原a,b=原n,c=原b。
LL exgcd(LL a,LL b,LL &x,LL &y)
{
if(b==0)
{
x=1,y=0;
return a;
}
LL xx,yy;
LL g=exgcd(b,a%b,xx,yy);
x=yy;y=xx-(a/b)*yy;
return g;
}
LL calc(LL a,LL b,LL c)
{
LL x,y;
LL g=exgcd(a,b,x,y);
if(c%g!=0) return -1 //无整数解
x*=c/g;
b=abs(b/g);
return (x%b+b)%b;
}