设整数m1,m2,m3…..mn两两互质
那么
设Mi=M/mi,Hi=Mi^-1;
对于这个同余方程组,如果M=m1m2*……*mn的话,那么x=(a1*M1*H1+a2*M2*H2+………+an*Mn*Hn)%M.
容易发现当mod数为m1时,a1*M1*H1显然成立,当mod数为m2时,a2*M2*H2显然成立,所以我虽然不知道这个定理是怎么推出来的,就先假装我是构造出了若干个使得同余方程组都成立的条件然后加起来,就和拉格朗日插值法一样。
中国剩余定理一般用于解决在某些mod意义下需要用到除号,而mod数却不是质数,逆元无法很方便求出来的情况下使用的。(或者是做裸题,虽然我还没做过)。
所以就很妙啦。当mod数不是质数的时候,却要用逆元,就把mod数质因数分解,拆成pi^ci+pi+1^ci+1的形式,这样对于每个pi一个一个做,求ai,就相当于是列出了若干个同余方程组,最后把一个个求出来的答案用x的公式推出来就搞定了。
那么考虑怎么做一个pi,我们把合数的mod数拆成质数就是为了让本来没有逆元的数有逆元,但是我们发现对于pi^ci还是有的数没逆元,譬如pi^ci=9,而某个数为6的时候,就又无能为力了。所以我们考虑把每个在处理的数拆成a*pi^c的形式,这样的话对于乘法,除法,我们都相当于是进行了幂的运算。所以我们就巧妙的绕过了逆元的问题,最后再进行一波处理。
http://blog.miskcoo.com/2014/09/chinese-remainder-theorem
然后如果n很大不能够很方便的推的时候,就考虑找循环节,然后剩下的递归乱搞。这样就可以很快的求出任意项的fac。
模板2合1
http://blog.csdn.net/qq_36993218/article/details/62889975
插上我认为觉得写得非常好的大爷的小结