类欧几里得算法初步

考虑计算这样一个函数:

\[f(a , b , c , n) = \sum_{i=0}^{n} \lfloor \frac{a \times i + b}{c} \rfloor \]

带向下取整的式子,我们一般考虑整除分块的做法,但对于这个式子显然不太好做,我们考虑其他做法。

首先考虑 \(c \le a\) 或者 \(c \le b\) 的情况。

比较简单可以得到:

\[f(a , b , c , n) = \sum_{i=0}^{n} \lfloor \frac{(\lfloor \frac{a}{c} \rfloor \times c + a \bmod c) \times i + \lfloor \frac{b}{c} \rfloor + b \bmod c}{c} \rfloor \]

\[f(a , b , c , n) = \frac{n \times (n + 1)}{2} \times \lfloor \frac{a}{c} \rfloor + (n + 1) \times \lfloor frac{b}{c} \rfloor + f(a \bmod c , b \bmod c , c , n) \]

现在考虑化简 \(a < c\) 并且 \(b < c\) 的情况。

我们的目标是将 \(c\) 变小,从而使得式子上述情况能被反复使用。

有一个很简单的性质:

\[x = \sum_{i=1}^{x} \lbrack i \leq x \rbrack \]

所以,我们可以把我们的函数化成大概这个样子:

\[f(a , b , c , n) = \sum_{i=0}^{n} \lfloor \frac{a \times i + b}{c} \rfloor \]

\[f(a , b , c , n) = \sum_{i=0}^{n} \sum_{k} [k \leq \lfloor \frac{a \times i + b}{c} \rfloor] \]

\[f(a , b , c , n) = \sum_{i=0}^{n} \sum_{k} [\lfloor \frac{k \times c - b}{a} \rfloor < i] \]

\[f(a , b , c , n) = \sum_{k} \sum_{i=0}^{n} [\lfloor \frac{k \times c - b}{a} \rfloor < i] \]

这里考虑进行容斥,将式子化成与最初类似的形式:

\[f(a , b , c , n) = \sum_{k} (n - \sum_{i=1}^{n} [i \leq \lfloor \frac{k \times c - b - 1}{a} \rfloor]) \]

考虑继续化简,我们发现当 \(k\) 足够大时,即\(n \leq \lfloor \frac{k \times c - b - 1}{a} \rfloor\)结果必为 \(0\)

所以我们令:

\[\frac{k \times c - b - 1}{a} < n \]

即:

\[k < \frac{a \times n + b + 1}{c} \]

因为 \(k\) 为整数,所以有:

\[k \leq \lfloor \frac{a \times n + b}{c} \rfloor \]

因此我们令 \(P = \lfloor \frac{a \times n + b}{c} \rfloor\)

则:

\[f(a , b , c , n) = n \times P - \sum_{k=1}^{P}\sum_{i=1}^{n} [i \leq \lfloor \frac{k \times c - b - 1}{a} \rfloor]) \]

\[f(a , b , c , n) = n \times P - \sum_{k=1}^{P} \lfloor \frac{k \times c - b - 1}{a} \rfloor \]

\[f(a , b , c , n) = n \times P - \sum_{k=0}^{P-1} \lfloor \frac{k \times c + c - b - 1}{a} \rfloor \]

\[f(a , b , c , n) = n \times P - f(c , c - b - 1 , a , P - 1) \]

至此,该式子已经可以在 $\log $ 级别的时间内解决本问题。

现在这里有两个拓展:

\[g(a , b , c , n) = \sum_{i=0}^{n} i \times \lfloor \frac{a \times i + b}{c} \rfloor \]

\[h(a , b , c , n) = \sum_{i=0}^{n} \lfloor \frac{a \times i + b}{c} \rfloor ^ 2 \]

手推好像有一点萎,先咕咕咕。

posted @ 2021-01-20 17:21  Reanap  阅读(46)  评论(0编辑  收藏  举报