您的位置:首页 > 其它

解一元线性同余方程组模板

2013-08-13 11:28 134 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: