CRT and exlucas

CRT

解同余方程,形如\(x \equiv c_i \ mod \ m_i\),我们对每个方程构造一个解满足:

对于第\(i\)个方程:\(x \equiv 1 \ mod \ m_i\),\(x \equiv \ 0 \ mod \ m_j\)\((j!=i)\)

最后\(ans=\sum{x_i*c_i}\ mod \ M\)

其中\(M=\prod m_i\)

考虑构造\(x_i\),我们解同余方程\(\frac{M}{m_i}x\equiv 1\ mod \ m_i\)

所以\(x\)为\(inv(\frac{M}{m_i},m_i)\),最终\(x_i=inv(\frac{M}{m_i},m_i)*mi\)

所以\(ans=\sum c_i*(M/m_i)*inv(\frac{M}{m_i},m_i) \ mod M\)

扩欧合并同余方程

合并两个同余方程

\[\begin{cases}
x \equiv r_1 \pmod {m_1}\\
x \equiv r_2 \pmod {m_2}
\end{cases}\]

我们令\(x=m_1*k_1+r_1=m_2*k_2+r_2\),所以\(m_1*k_1-m_2*k_2=r_2-r_1\),我们只要解出一组\[(k1,k2)\],用扩欧解即可,解出来带入原方程即可得到\(x_0\),方程变为\(x\equiv x_0\ mod \ lcm(m1,m2)\)。

exLucas

不想写了,你可以看这里

上一篇:Django之路


下一篇:magento删除数据