类欧几里得算法

请大家注意:

因为作者写的文章中的梯等式公式总是莫名的显示错误,所以作者的许多文章中的梯等式都暴力拆成一步一个等式了。
造成的不适,请谅解。
同时,如果文章中还有其他错误,请联系作者,谢谢。

学习背景

之前做了一道类欧+二分的题目,就学一下。

问题模型




解法推导

为了方便,我们设
注意,因为取模符号太宽了,所以用C++的"%"来表示取模。

(一)

  • 第一种情况:
    这个可以直接推导,比较简单。
    \begin{align} f(n,a,b,c) &= \sum_{i=0}^{n} \left\lfloor \frac{ai+b}{c} \right\rfloor \\ &= \sum_{i=0}^{n} \sum_{j=0}^{n} \left[j < \left\lfloor \frac{ai+b}{c}\right\rfloor \right] \\ &= \sum_{j=0}^{m-1} \sum_{i=0}^{n} \left[j < \left\lfloor \frac{ai+b}{c}\right\rfloor \right] \\ &= \sum_{j=0}^{m-1} \sum_{i=0}^{n} \left[j < \left\lceil \frac{ai+b-c+1}{c}\right\rceil \right] \\ &= \sum_{j=0}^{m-1} \sum_{i=0}^{n} \left[j < \frac{ai+b-c+1}{c} \right] \\ &= \sum_{j=0}^{m-1} \sum_{i=0}^{n} \left [cj < ai+b-c+1 \right] \\ &= \sum_{j=0}^{m-1} \sum_{i=0}^{n} \left[ i> \frac{cj+c-b-1}{a} \right] \\ &= \sum_{j=0}^{m-1} n - \left\lfloor \frac{cj+c-b-1}{a} \right\rfloor \\ &= nm - \sum_{j=0}^{m-1} \left\lfloor \frac{cj+c-b-1}{a} \right\rfloor \\ &= nm - f(m - 1, c, c - b - 1, a) \end{align}
  • 第二种情况:
    这时候我们只要将拆开,就是:
    \begin{align} f(n,a,b,c) &= \sum_{i=0}^{n} \left\lfloor \frac{ai+b}{c} \right\rfloor \\ &= \sum_{i=0}^{n} \left( \left\lfloor \frac{(a % c)i+(b % c)}{c} \right\rfloor + i \left\lfloor \frac{a}{c} \right \rfloor + \left\lfloor \frac{b}{c} \right\rfloor \right) \\ &= \frac{n(n+1)}{2} \left\lfloor \frac{a}{c} \right\rfloor + n \left\lfloor \frac{b}{c} \right\rfloor + \sum_{i=0}^{n} \left\lfloor \frac{(a % c)i+(b % c)}{c} \right\rfloor \end{align}

(二)

第二类和第一类比较类似,就写得简单一点。

  • 第一种情况:
    \begin{align} g(n,a,b,c) &= \sum_{i=0}^{n} i \left\lfloor \frac{ai+b}{c} \right\rfloor \\ &= \sum_{j=0}^{m-1} \sum_{i=0}^{n} i \left[ \left\lfloor\ \frac{ai+b}{c} \right\rfloor > j \right] \\ &= \sum_{j=0}^{m-1} \sum_{i=0}^{n} i \left[ i > \left\lfloor \frac{cj+c-b-1}{a} \right\rfloor \right] \\ &= \frac{mn(n+1)}{2} - \sum_{j=0}^{m-1} \frac{\left\lfloor \frac{cj+c-b-1}{a} \right\rfloor (\left\lfloor \frac{cj+c-b-1}{a} \right\rfloor+1)}{2} \\ &= \frac{mn(n+1)}{2} - \frac{1}{2} \sum_{j=0}^{m-1} \left( \left\lfloor \frac{cj+c-b-1}{a} \right\rfloor \right)^2 - \frac{1}{2} \sum_{j=0}^{m-1} \left\lfloor \frac{cj+c-b-1}{a} \right\rfloor \\ &= \frac{mn(n+1)}{2} - \frac{1}{2}h(n,c,c-b-1,a) - \frac{1}{2}f(n,c,c-b-1,a) \end{align}
  • 第二种情况:
    这个也和类似,直接给出结论了:

(三)

因为这里涉及到了平方,所以我们考虑用一种求和式表示平方。

之后,有如下推导:

  • 第一种情况:

    之后,就用与求和类似的方法,得到:

  • 第二种情况:
    对于这个,就直接将三项式暴力拆开,就有:
    \begin{align} h(n,a,b,c) = \left\lfloor \frac{a}{c} \right\rfloor^2 \times \frac{n(n+1)(2n+1)}{6} + \left\lfloor \frac{b}{c} \right\rfloor^2 \times (n+1) + \left\lfloor \frac{a}{c} \right\rfloor \times \left\lfloor \frac{b}{c} \right\rfloor \times n(n+1) + h(n,a \% c, b \% c, c) + 2\left\lfloor \frac{a}{c} \right\rfloor g(n,a \% c, b \% c, c) + 2\left\lfloor \frac{b}{c} \right\rfloor f(n,a \% c, b \% c, c) \end{align}

你可能感兴趣的:(类欧几里得算法)