不能称之为浅谈,因为很多本质的东西没有引入进来。
好的,接下来我们需要求解 \(\sum_{i = 0}^n \lfloor \frac{ai + b}{c} \rfloor\),为了方便,如果下面的分式没有特殊说明,均取下取整。容易发现,\(a, b\) 是负数时可以变成非负数,因此这里只考虑 \(a, b \ge 0\) 的情况。
下面我们推导这些公式,设 \(n, a, b, c\) 的答案为 \(f(n, a, b, c)\),分几类:
-
\(a = 0\),那么 \(f(n, a, b, c) = (n + 1) \frac{b}{c}\)。
-
\(a \ge c\) 或者 \(b \ge c\),\(f(n, a, b, c) = \sum_{i = 0}^n \frac{(a \bmod c) i + b \bmod c}{c} + i \frac{a}{c} + \frac{b}{c} = f(n, a \bmod c, b \bmod c, c) + \frac{n * (n + 1)}{2} \frac{a}{c} + (n + 1)\frac{b}{c}\)。
-
否则,设 \(lim = \frac{an + b}{c}\),\(f(n, a, b, c) = \sum_{i = 0}^n\sum_{j = 1}^{lim} [j \le \frac{ai + b}{c}] = \sum_{i = 0}^n \sum_{j = 0}^{lim - 1}[jc + c < ai + b + 1] = \sum_{i = 0}^n \sum_{j = 0}^{lim - 1}[jc + c - b - 1 < ai] = \sum_{i = 0}^n \sum_{j = 0}^{lim - 1}[i > \frac{jc + c - b - 1}{a}] = nlim - f(lim - 1, c, c - b - 1, a)\)。
递归下去,时间复杂度与欧几里得/扩展欧几里得算法分析一致,均为 \(\log V\),更为复杂的系数同样可以再上面推导,这里不再细写(本质不会)。
