浅谈一类含有系数的线性同余方程组的解法
浅谈一类含有系数的线性同余方程组的解法
对于这种带有系数的线性同余方程组,首先会想到 \(\texttt{EXCRT}\),但 \(\texttt{EXCRT}\) 并不带有系数。这不妨碍我们使用 \(\texttt{EXCRT}\) 合并线性同余方程的解的思想。
使用归纳法,设满足前 \(i-1\) 个方程的解为 \(x\),在模 \(p_1,p_2,p_3...p_{i-1}\) 意义下都为 \(0\) 且模 \(b_1,b_2...b_{i-1}\) 都为 \(0\) 的最小正整数为 \(M\)。那么对于第 \(i\) 个方程,我们需要求一个最小的正整数 \(k\),满足 \(b_i(x+M\times k)\equiv a_i\pmod{p_i}\)。
可以对上式变形,得:
发现该式只有一个变量 \(k\) ,经典的线性同余方程问题:
使用 \(\texttt{EXGCD}\) 求出一个正整数解 \(k\),满足前 \(i\) 个方程的解 \(x'=x+M\times k\)。
现在只需要考虑 \(M\) 的值如何更新。因为按照数学归纳法,只要 \(M\) 的值对于 \(\forall i\) 都正确,就可以不断合并第 \(i\) 个方程与前 \(i-1\) 个方程的解。
由于 \(M\) 的值已经满足前 \(i-1\) 个方程的要求,我们只需要再给 \(M\) 乘上一个增量使它满足第 \(i\) 个方程的要求即可,记满足前 \(i\) 个方程的 \(M\) 为 \(M’\),正确性显然。这里我们观察一下,\(k\) 增加 \(1\) ,\(x'\) 增加 \(b_iM\),我们需要得到的 \(M'\) 满足 \(M'\equiv0\pmod{b_i},M'\equiv0\pmod{p_i}\)。显然有 \(b_iM'=\texttt{lcm}(b_iM,p_i)\),\(M'=\frac{\texttt{lcm}(b_iM,p_i)}{b_i}=\frac{Mp_i}{\texttt{gcd}(b_iM,p_i)}=M\times\frac{p_i}{\texttt{gcd}(b_iM,p_i)}\)。
可以得到乘上的增量为 \(\frac{p_i}{\texttt{gcd}(b_iM,p_i)}\) ,更新 \(M\) 的时间复杂度为 \(O(\log m)\),解线性同余方程的时间复杂度为 \(O(\log m)\)。总时间复杂度为 \(O(n \log m)\),其中 \(m\) 为值域上界。
最后,这里粗略说明一下 \(M\) 为何分别需在模 \(\{a_1,a_2...a_i,b_1,b_2...b_i\}\) 意义下为 \(0\) 。
对于第 \(i\) 个方程的解,\(\exist x',x'=x+M\times k\) 并且满足第 \(i\) 个方程的要求。对于满足前 \(i-1\) 方程的增量 \(M\),与不带系数时不同,必须满足对于 \(\forall j\leq i-1,b_i|M\)。并且还需要满足 \(\forall j\leq i-1,p_i|M\)。
于是该问题在被归约成简单的线性同余方程问题后得解,为广义线性同余方程组的解法拓展了思路(雾。
虽然都是几十年前的学术界玩剩了的

浙公网安备 33010602011771号