类欧几里得算法初步
考虑计算这样一个函数:
\[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
\]
手推好像有一点萎,先咕咕咕。