[NOI2018] 屠龙勇士
题意经过简化。
求下面同余方程组的最小整数解,要求 \(x \geq L\):
\(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 解决的是下面的问题:
考虑如何转化成这种形式。
对于 \(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,其可以合并:
即:
两式相减,得到 \(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)}\)
至此,本题结束。

浙公网安备 33010602011771号