扩展欧几里德定理,参考http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html,顺便现学现卖。
扩展欧几里得定理:对于两个不全为0的整数a、b,必存在一组解x,y,使得ax+by==gcd(a,b);
其中求gcd的代码模板:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
long long xx,yy;
long long gcd(long long a,long long b)
{
long long ans,tmp;
if(b==0){
xx=1;
yy=0;
return a;
}
ans=gcd(b,a%b);
tmp=xx;
xx=yy;
yy=tmp-(a/b)*yy;
return ans;
}
然后求的xx,yy的通解:假设d=gcd(a,b). 那么 xx=x+b/d*t; yy=y-a/d*t; 其中t为任意常整数。
对于最后一道poj2891中用到的最后一个公式,还没推导明白。复制过来,待后续理解。t=(xx*tmp/ans%(aa/ans)+(aa/ans))%(aa/ans);(个人认为是自己写乱了。。。)
中国剩余定理:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
设m1,m2,...,mk是两两互素的正整数,即gcd(mi, mj) =1, i≠j, i,j = 1,2,...,k
则同余方程组:
x≡b1 (mod m1)
x≡b2 (mod m2)
...
x≡bk (mod mk)
模[m1,m2,...,mk]有唯一解,即在[m1,m2,...,mk]的意义下,存在唯一的x,满足:
x≡bi mod [m1,m2,...,mk], i = 1,2,...,k