类欧几里得算法

· · 个人记录

常用形式

洛谷模板

这里只解决第一个问,后面的类比第一个

\sum_{i=0}^n \lfloor\frac{ai + b}{c} \rfloor,n \leq 10^9,多组询问

f(n,a,b,c) = \sum_{i=0}^n \lfloor\frac{ai + b}{c} \rfloor,我们递归解决这个问题

$$f(n,a,b,c) = \sum_{i=0}^n \lfloor\frac{ai + b}{c} \rfloor$$ $$= \sum_{i=0}^n \lfloor\frac{i(a\%c) + b\%c}{c} \rfloor + i \lfloor \frac{a}{c} \rfloor + \lfloor \frac{b}{c} \rfloor$$ $$= f(n,a\%c,b\%c,c) + \frac{n(n + 1)}{2}\lfloor \frac{a}{c} \rfloor + (n + 1)\lfloor \frac{b}{c} \rfloor$$ $a<c\ \ \&\& \ \ b<c$ 时,令$m = \lfloor \frac{an + b}{c} \rfloor f(n,a,b,c) = \sum_{i=0}^n \sum_{j = 1}^m [j \leq \lfloor \frac{ai + b}{c} \rfloor]

将枚举j放到外层,化简,有

=\sum_{j = 0}^{m-1}\sum_{i=0}^n[jc + c < ai + b + 1]

将限制j变成限制i

=\sum_{j = 0}^{m-1}\sum_{i=0}^n[i > \lfloor \frac{jc + c - b - 1}{a} \rfloor]

将大于号换成小于等于,即可递归下去

\sum_{j = 0}^{m-1}(n - [i \leq \lfloor \frac{jc + c - b - 1}{a} \rfloor]) = nm - f(m - 1,c,c-b-1,a)

递归边界为a = 0

时间复杂度为O(logn)

一般形式

LOJ138

\sum_{i = 0}^n i^{k1} \lfloor \frac{ai + b}{c} \rfloor ^{k2},n\leq 10^9,k1,k2\leq 10

暂时不会,咕咕咕