【数论总结】
作者:互联网
一、中国剩余定理
问题
求解线性同余方程组:
\(\begin{cases} x\equiv a_1\pmod {m_1}\\x\equiv a_2\pmod{ m_2}\\ \dots\\x\equiv a_n\pmod {m_n} \end{cases}\)
- 弱化版(保证\(m_i\)两两互质)
可以证明此时一定有解,且可以构造出一个解\(x_0\),那么通解显然为\(x\equiv x_0\pmod {\operatorname{lcm}\limits_{i=1}^nm_i}\)。
在模数互质的情况下容易构造出\(x_0\),设\(M_i=\frac{\prod\limits_{i=1}^nm_i}{m_i}\),\(M_iM_i^{-1}\equiv 1\pmod {m_i}\),则\(x_0=\sum\limits_{i=1}^na_iM_iM_i^{-1}\)
实现时,先把模数都乘起来,枚举1~n,求出每个\(M_i\)在\(m_i\)下的逆元(用exgcd),同时按照式子一边累加,一边对所有模数的乘积(在模数两两互质时,所有模数的乘积即为所有模数的lcm)取模即可。
需要注意,所有模数的乘积可能很大,因此在求\(a_iM_iM_i^{-1}\)时可能要使用龟速乘。
复杂度\(O(nlog w)\)(不论是否使用龟速乘) - 拓展中国剩余定理(不保证\(m_i\)两两互质)
因为模数不再保证互质,因此\(M_i\)和\(m_i\)不一定互质,就无法求得\(M_i\)的逆元,所以我们换一种思路:考虑合并两个形如\(x\equiv a_1\pmod {m_1}\),\(x\equiv a_2\pmod {m_2}\)的式子。
那么有\(x=a_1+k_1m_1=a_2-k_2m_2\),即\(k_1m_1+k_2m_2=a_2-a_1\),若\(gcd(m_1,m_2)\not |(a_2-a_1)\),则方程一定无解,否则,可以用exgcd求出一组\((k_1,k_2)\),那么合并后的方程即为\(x=a_1+k_1m_1\pmod{lcm(m_1,m_2)}\)
实现时,枚举2~n,同时维护一个\(a_1,m_1\),把当前枚举的\(a_i,m_i\)作为推到中的\(a_2,m_2\)即可。与弱化版相同需要注意是否需要使用龟速乘。复杂度同样为\(O(nlog w)\)(不论是否使用龟速乘)
二、BSGS算法
标签:总结,龟速,模数,数论,pmod,iM,互质,equiv 来源: https://www.cnblogs.com/glq-Blog/p/16424271.html