非互质中国剩余定理求线形模方程组(形如 X%mi=ai)

来源:互联网 发布:淘宝网天天特价入口 编辑:程序博客网 时间:2024/05/16 17:17
typedef long long LL;LL exgcd(LL a,LL b,LL &x,LL &y){     if(a==0&&b==0) return -1;     if(b==0) { x=1;y=0; return a;  }     LL d=exgcd(b,a%b,y,x);     y-=a/b*x;     return d;}int m[10],a[10];  //存方程组,模数为m,余数为a,即 X%m=a  (X是我们要求的)bool solve(int &m0,int &a0,int m,int a){     LL y,x;     int g=exgcd(m0,m,x,y);     if(abs(a-a0)%g) return false;  //注意使用cstdlib中的abs()     x*=(a-a0)/g;     x%=m/g;     a0=(x*m0+a0);     m0*=m/g;     a0%=m0;     if(a0<0)a0+=m0;     return true;}/*无解返回false ,有解返回true解的形式最后为 a0+m0*t (0<=a0<m0)*/int m0,a0;bool MLES(int &m0,int &a0,int n){  //解为 X=a0+m0*k   bool flag =true;   m0=1;   a0=0;   for(int i=0;i<n;i++){       if(!solve(m0,a0,m[i],a[i])){        flag=false;        break;       }   }   return flag;}


 

1 0
原创粉丝点击