中国剩余定理

来源:互联网 发布:剑灵灵女捏脸数据图表 编辑:程序博客网 时间:2024/06/05 03:23

①设正整数两两互素,
中国剩余定理给出了以下的一元线性同余方程组:
这里写图片描述
中国剩余定理说明:假设整数m1,m2, … ,mn两两互质,则对任意的整数:a1,a2, … ,an,
方程组(S)
有解,并且通解可以用如下方式构造得到:
这里写图片描述是整数m1,m2, … ,mn的乘积,并设这里写图片描述是除了mi以外的n- 1个整数的乘积。
这里写图片描述这里写图片描述通解形式为这里写图片描述在模M的意义下,方程组(S)只有一个解:这里写图片描述
poj1006
②当m不互质:
前辈的总结
这里写图片描述
问题描述:给出bi,ni的值,且n1, n2, n3,…, ni两两之间不一定互质,求Res的值?
解:采用的是合并方程的做法。
这里将以合并第一第二个方程为例进行说明
由上图前2个方程得(设k1、k2为某一整数):
这里写图片描述
已知方程组(b1,b2,n1,n2是已知量):
res%b1 = n1
res%b2 = n2
->
合并两条方程得到:
res % ( (n1*n2)/d ) = b1+n1*( K%(n2/d))
其中K = (k1*(b2-b1)/d) % (n2/d);
其中d = gcd(n1,n2);
其中k1:
k1*n1 - k2*n2 = b2-b1
k1,d 可以直接由extend_gcd得到 extend_gcd(n1,n2,d,k1,k2);
(b2-b1)%d == 0 说明extend跑出的k1是一个解,否则说明不存在满足解的k1
注意求K时:为了得到最小非负整数K,所以用一个取模的技巧
K = (K%mod+mod)%mod;
后面一种情况就比较难了。