void ext_gcd(int a,int b,int &d,int &x,int &y)
{
if(!b)
{
x=1;
y=0;
d=a;
return ;
}
else
{
ext_gcd(b,a%b,d,y,x);
y-=a/b*x;
}
}
int slove(int r)///x=b[i](mod a[i])
{
int ta=a[0],tb=b[0];
bool flag=true;
for(int i=1; i<r; i++)
{
int xa=ta,xb=a[i],c=b[i]-tb,d,x,y;
ext_gcd(xa,xb,d,x,y);
if(c%d)
{
flag=false;
break;
}
int tmp=xb/d;
x=(x*(c/d)%tmp+tmp)%tmp;
tb=ta*x+tb;
ta=ta/d*a[i];
}
if(!flag) return -1;
return tb;
}
解一元线性同余方程组模板
最新推荐文章于 2021-03-01 21:38:09 发布