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}xequiv 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)

扩欧合并同余方程

合并两个同余方程

[egin{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),方程变为(xequiv x_0 mod lcm(m1,m2))

exLucas

不想写了,你可以看这里

原文地址:https://www.cnblogs.com/dengyixuan/p/10024593.html