一次类欧几里得浅谈

入门篇。
非常啰嗦 , 不适合大佬浏览。

\[\large\text{Case 1 :}\ a \ge c\ \text{or}\ b \ge c \]

\[\begin{aligned} f(a,b,c,n) = & \sum\limits^n_{i=0} \left\lfloor \frac{ia+b}{c} \right\rfloor \\ = & \sum\limits^n_{i=0} \left\lfloor \frac{i(c\left\lfloor\ \frac {a}{c}\right\rfloor+ a\ \text{mod}\ c)+(c\left\lfloor\ \frac {b}{c}\right\rfloor+ b\ \text{mod}\ c)}{c} \right\rfloor \\ = & \sum\limits^n_{i=0} \left\lfloor \frac{i(a\ \text{mod}\ c)+ b\ \text{mod}\ c}{c} \right\rfloor+i\left\lfloor\ \frac {a}{c}\right\rfloor+\left\lfloor\ \frac {b}{c}\right\rfloor \\ = & f(a\ \text{mod}\ c,b\ \text{mod}\ c,c,n)+i\left\lfloor\ \frac {a}{c}\right\rfloor+\left\lfloor\ \frac {b}{c}\right\rfloor \\ \end{aligned}\]

这个递推式的时间复杂度是 \(O(\log n)\) 的 , 因为参数如 \(\text{gcd}\) 一样减小 ,
所以 , 类 欧几里得。

\[\large\text{Case 2:}\ a \leq c \ \text{and}\ b \leq c \]

\[\begin{aligned} f(a,b,c,n) = & \sum\limits^n_{i=0} \left\lfloor \frac{ia+b}{c} \right\rfloor \\ = & \sum\limits^n_{i=0} \sum\limits^{ \left\lfloor \frac{ia+b}{c} \right\rfloor-1}_{j=0} 1 \\ = & \sum\limits^{ \left\lfloor \frac{na+b}{c} \right\rfloor-1}_{j=0} \sum\limits^n_{i=0}\ [j<\left\lfloor \frac{ia+b}{c} \right\rfloor]\\ = & \sum\limits^{ \left\lfloor \frac{na+b}{c} \right\rfloor-1}_{j=0} \sum\limits^n_{i=0}\ [j+1 \leq \frac{ia+b} c ]\\ = & \sum\limits^{ \left\lfloor \frac{na+b}{c} \right\rfloor-1}_{j=0} \sum\limits^n_{i=0}\ [jc+c-1 < ia+b ]\\ = & \sum\limits^{ \left\lfloor \frac{na+b}{c} \right\rfloor-1}_{j=0} \sum\limits^n_{i=0}\ [i>\left\lfloor \frac{jc+c-1-b} a \right\rfloor]\\ = & \ \sum\limits^{ \left\lfloor \frac{na+b}{c} \right\rfloor-1}_{j=0} n-\left\lfloor \frac{jc+(c-1-b)} a \right\rfloor\\ = & \left\lfloor \frac{na+b}{c} \right\rfloor n-f(c,c-1-b,a,\left\lfloor \frac{na+b}{c} \right\rfloor-1) \end{aligned}\]

中间有一些不清楚的地方说明一下 :
首先是 $j<\left\lfloor \frac{ia+b}{c} \right\rfloor \ \Leftrightarrow\ j+1 \leq \left\lfloor \frac{ia+b}{c} \right\rfloor \ \Leftrightarrow\ j+1 \leq \frac{ia+b}{c} $。
由于两个都是整数 , 所以 \(+1\) 以后显然变为 \(\leq\)
然后就是后面那个操作 , 同理 , 左边要满足要求的话是右边的最大整数。由于 \(\frac{ia+b}{c}>\left\lfloor \frac{ia+b}{c} \right\rfloor\) , 所以这个东西也显然成立。
然后条件变为 \(jc+c \leq ia+b\) , 显然可以转化为 \(jc+c-1 < ia+b \ \Leftrightarrow\ -ia<b-c-jc+1 \ \Leftrightarrow\ ia>jc+c-b-1\)
考虑把 \(a\) 除过去 , 把右边变为整数 :
\(ia>jc+c-b-1\ \Leftrightarrow\ i>\frac{jc+c-b-1}{a}\) ,
又因为 \(\frac{jc+c-b-1}{a}<\left\lfloor \frac{jc+c-b-1}{a} \right\rfloor\) , 所以 \(i>\frac{jc+c-b-1}{a} \ \Leftrightarrow\ i> \left\lfloor \frac{jc+c-b-1}{a} \right\rfloor\)
这样子就变成了有一个递推式了。

posted @ 2020-02-13 11:36  _ARFA  阅读(102)  评论(0编辑  收藏  举报