[NOI2018] 屠龙勇士

题意经过简化。

求下面同余方程组的最小整数解,要求 \(x \geq L\):

\[\begin{cases} b_1 x \equiv a_1 \pmod {p_1} \\ b_2 x \equiv a_2 \pmod {p_2} \\ \dots \\ b_n x \equiv a_n \pmod {p_n} \\ \end{cases} \]

\(n \leq 10^5\),\(a_i \leq 10^{12}\),\(b_i \leq 10^6\),\(\operatorname*{lcm}\limits_{i=1}^{n} p_i \leq 10^{12}\),\(L \leq 10^{12}\)。

这里的 \(p_i\) 不一定是质数。


首先我们肯定需要使用 excrt,但是 excrt 解决的是下面的问题:

\[\begin{cases} x \equiv a_1 \pmod {p_1} \\ x \equiv a_2 \pmod {p_2} \\ \dots \\ x \equiv a_n \pmod {p_n} \\ \end{cases} \]

考虑如何转化成这种形式。

对于 \(bx \equiv a \pmod p\),可以得到 \(bx + py = a\)。

我们可以使用 exgcd 解出一个特解 \((x_0,y_0)\)。

接下来考虑 \(x = x_0 + \dfrac{p}{\gcd(b,p)} t\)。

所以,\(x \equiv x_0 \pmod {\dfrac{p}{\gcd(b,p)}}\)。

接下来我们重新推一遍 excrt,其可以合并:

\[\begin{cases} x \equiv a_1 \pmod {p_1} \\ x \equiv a_2 \pmod {p_2} \\ \end{cases} \]

即:

\[\begin{cases} x = a_1 + p_1 y_1 \\ x = a_2 + p_2 y_2 \\ \end{cases} \]

两式相减,得到 \(p_1 y_1 - p_2 y_2 = a_2 - a_1\)。

我们可以解出一组 \((y_1,y_2)\),不妨记作 \((z_1,z_2)\)。

以 \(y_1\) 为例,显然 \(y_1 = z_1 + \dfrac{p_2}{\gcd(p_1,p_2)} t\)。

也就是说, \(x = a_1 + p_1 (z_1 + \dfrac{p_2}{\gcd(p_1,p_2)} t)\)。

化简,\(x = a_1 + p_1 z_1 + \operatorname*{lcm}(p_1,p_2) t\)。

也就是说,\(x \equiv a_1 + p_1 z_1 \pmod {\operatorname*{lcm}(p_1,p_2)}\)

至此,本题结束。

posted @ 2026-03-18 09:58  Oken喵~  阅读(16)  评论(0)    收藏  举报