Maths 10.8
B. P7325
问题相当于求一个最小的 \(c\) \(s.t.\) \(a \times F_{c - 1} + b \times F_c \equiv 0 (\mod m)\)。
将 \(b\) 去相反数,得到 \(a \times F_{c - 1} \equiv b \times F_{c} (\mod m)\)。
我们同余式除以 \(d = \gcd(a, b, m)\) 得到 \(a' \times F_{c-1} \equiv b' \times F_c (\mod m')\)。
我们再将式子除以 \(d' = \gcd(b', m')\),得到 \(a' \frac{F_{c-1}}{d'} \equiv b'' \times F_c (\mod m'')\)。
把 \(b''\) 移到左边,我们现在可以证明 \(g = \gcd(\frac{F_{c - 1}}{d'}, m'') = 1\)。
因此左边的数也可以求逆。
考虑预处理的状态现在和 \(d, d', c, m\) 有关。
但是你又发现 \(d' = \gcd(F_{c - 1}, m')\),故只需对于所有 \(d | m\) 进行枚举。
时间复杂度大概在 \(O(m \log \log m \log m)\)。
A. P3543
对于这个数列进行查分转化为单点上的操作,然后我们对于每一个点先预先求出最小的修改次数,这个使用 exgcd 方便解决。
我们接下来根据 \(a\) 操作次数的正负性进行调整,我们直接把需要调整的数扔进一个优先队列里去搞就可以了。时间复杂度 \(O(n \log n)\)。
注意 sgn 不要写反,以及可能出现的负余数。
H. P5572
推狮子题。
最终的式子是 \(\sum_{T = 1}^{m} \sum_{d | T}{\mu(d) (\sum_{i = 1}^{\frac{n}{T}}{\phi(id)}) (\sum_{j = 1}^{\frac{m}{T}}{\phi(jd)})}\)。
后面有关于 \(i, d\) 的一部分我们使用 \(n \ln n\) 的预处理求出,为 \(f(i, d) = \sum_{o = 1}^i{\phi(od)}\)。
接下来我们对 \(T\) 根号分治:
-
对于 \(T \le \sqrt{n}\),直接枚举。
-
对于 \(T > \sqrt{n}\),我们设计另一个状态 \(g(i, j, s)\) 进行维护,转化成一个前缀和的形式。
总复杂度大概在 \(O(n \sqrt{n} \log n)\)。

浙公网安备 33010602011771号