类欧几里得算法
类欧几里得算法
我们知道欧几里得算法求\(\tt gcd\),过程为\(\gcd(x,y)=\gcd(x\%y,y)\)
我们不难证明,时间复杂度为\(O(\log_2n)\)
而有一类特殊的前缀和问题,可以通过一系列推导使得其满足欧几里得算法的递归式,从而简化或证明其时间复杂度为\(O(\log_2n)\),我们称此类算法为类欧几里得算法
\(\rm eg.1\)
已知\(a,b,c,n\leq10^9\),求\(\sum_{i=0}^n\lfloor{ai+b\over c}\rfloor\)
我们不难发现,这种变量在分子上的分段函数是难以进行整除分块的,这时只能使用类欧几里得算法
我们令\(f(a,b,c,n)=\sum_{i=0}^n\lfloor{ai+b\over c}\rfloor\)
则我们进行分类讨论:
-
\(\max(a,b)\geq c\)
\[\begin{align} f(a,b,c,n)&=\sum_{i=0}^n\lfloor{ai+b\over c}\rfloor\\ &=\sum_{i=0}^n\left(\left\lfloor{(a\%c)i+(b\%c)\over c}\right\rfloor+i \left\lfloor{a\over c}\right\rfloor+\left\lfloor{b\over c}\right\rfloor\right)\\ &=\frac{n(n+1)}{2}\left\lfloor\frac{a}{c}\right\rfloor+(n+1)\left\lfloor\frac{b}{c}\right\rfloor+\sum_{i=0}^n\left\lfloor{(a\%c)i+(b\%c)\over c}\right\rfloor\\ &=\frac{n(n+1)}{2}\left\lfloor\frac{a}{c}\right\rfloor+(n+1)\left\lfloor\frac{b}{c}\right\rfloor+f(a\%c,b\%c,c,n) \end{align} \] -
\(\max(a,b)\leq c,\)令\(m=\lfloor\frac{an+b}{c}\rfloor\)
\[\begin{align} f(a,b,c,n)&=\sum_{i=0}^n\lfloor{ai+b\over c}\rfloor\\ &=\sum_{i=0}^n\sum_{j=1}^m\left[j\leq \lfloor\frac{ai+b}{c}\rfloor\right]\\ &=\sum_{i=0}^n\sum_{j=1}^m\left[\lfloor\frac{ai+b-cj}{c}\rfloor\geq 0\right]\\ &=\sum_{i=0}^n\sum_{j=1}^m\left[ai+b-cj\geq 0\right]\\ &=\sum_{i=0}^n\sum_{j=0}^{m-1}\left[ai+b\geq cj+c\right]\\ &=\sum_{i=0}^n\sum_{j=0}^{m-1}\left[ai+b+1> cj+c\right]\\ &=\sum_{i=0}^n\sum_{j=0}^{m-1}\left[i>\left\lfloor{cj+c-b-1\over a}\right\rfloor\right]\\ &=\sum_{i=0}^{m-1}\left(n-\left\lfloor{cj+c-b-1\over a}\right\rfloor\right)\\ &=nm-f(c,c-b-1,a,m-1) \end{align} \]
至此,我们便得到了同\(\tt gcd\)时间复杂度的算法
其它的结构以后再更,咕咕咕~~
因果乃旋转纺车,光彩之多面明镜
浮世苍茫,不过瞬逝幻梦
善恶爱诳,皆有定数
于命运之轮中
吞噬于黄泉之冥暗
呜呼,吾乃梦之戍人
幻恋之观者
唯于万华镜中,永世长存
浮世苍茫,不过瞬逝幻梦
善恶爱诳,皆有定数
于命运之轮中
吞噬于黄泉之冥暗
呜呼,吾乃梦之戍人
幻恋之观者
唯于万华镜中,永世长存