标签:crt else 方程组 用途 线性同余方程 不定方程 turn [1] 同余方程
解不定方程 $ ax+by = c $
ll exgcd(ll a,ll b,ll &x,ll &y){
if(b==0){x=1,y=0;return a;}
ll tmp=exgcd(b,a%b,y,x);
y-=a/b*x;
return tmp;
}
int main(){
ll a,b,c;
ll m,x,y;
m=exgcd(a,b,x,y);
if(c%m!=0)cout<<"No\n"; //无解
else{
c/=m,x*=c,y*=c,a/=m,b/=m;
//令x取最小非负整数
x1=x%b;if(x1<0)x1+=abs(b);
y1=(c-a*x1)/b;
//令y取最小非负整数
y1=y%a;if(y1<0)y1+=abs(a);//(y>=0?y%a:y%a+abs(a));
x1=(c-b*y1)/a;
}
}
解线性同余方程组 $ x \equiv a_i \pmod{m_i} $
ll excrt(ll *a,ll *m,ll n){
ll a0=a[1],m0=m[1],x,y,g;
rep(i,2,n){
g=exgcd(m0,m[i],x,y);
if((a[i]-a0)%g!=0)return -1;
x=(a[i]-a0)/g*x%(m[i]/g);
a0+=x*m0;
m0=m0/g*m[i];
a0%=m0;
}
return a0<0?(a0%m0+m0):(a0%m0);
}
标签:crt else 方程组 用途 线性同余方程 不定方程 turn [1] 同余方程
原文地址:https://www.cnblogs.com/ubospica/p/9723111.html