类欧几里得算法

求$\sum_{i=0}^{n} \lfloor \frac{a*i+b}{c} \rfloor$

当$c\leq a$或$c \leq b$时

  $$\lfloor \frac{a}{c} \rfloor * \frac{n*(n+1)}{2}+\lfloor \frac{b}{c} \rfloor*(n+1)+\sum_{i=0}^{n} \lfloor \frac{(a \mod c) *i+(b \mod c)}{c} \rfloor$$

否则令$m=\lfloor \frac{a*i+b}{c} \rfloor-1$

$$=\sum_{i=0}^{n} \sum_{j=0}^{m}1$$

$$=\sum_{i=0}^{n} \sum_{j=0}^{m} [j<\lfloor \frac{a*i+b}{c} \rfloor]$$

$$=\sum_{i=0}^{n} \sum_{j=0}^{m} [j<\lceil \frac{a*i+b-c+1}{c} \rfloor]$$

$$=\sum_{i=0}^{n} \sum_{j=0}^{m} [c*j < a*i+b-c+1]$$

$$=\sum_{j=0}^{m} \sum_{i=0}^{n} [a*i>c*j-b+c-1]$$

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

$$=\sum_{j=0}^{m} n-\lfloor \frac{c*j-b+c-1}{a} \rfloor$$

$$=n*(m+1)-\sum_{j=0}^{m} \lfloor \frac{c*j-b+c-1}{a} \rfloor$$

我们可以递归处理,复杂度和欧几里得算法相同。

posted @ 2019-06-15 15:15  iamunstoppable  阅读(229)  评论(0编辑  收藏  举报