类欧几里得算法学习笔记
题目
求 \(f(a,b,c,n)=\sum\limits_{i=0}^n\lfloor\frac{ai+b}c\rfloor\)
题解
当 \(a\ge c\) 或 \(b\ge c\) 时,
\(\begin{aligned}
\sum\limits_{i=0}^n\lfloor\frac{ai+b}c\rfloor & = \sum\limits_{i=0}^n\lfloor\frac ac\rfloor i+\lfloor\frac bc\rfloor+\lfloor\tfrac{(a\bmod c)i+b\bmod c}c\rfloor
\\ & =\lfloor\frac ac\rfloor(\frac 12n(n+1))+(n+1)\lfloor\frac cb\rfloor+f(a\bmod c,b\bmod c,c,n)
\end{aligned}\)
那么此时就满足 \(a<c,b<c\) 了。然后
\(\begin{aligned}
\sum\limits_{i=0}^n\lfloor\frac{ai+b}c\rfloor&=\sum\limits_{i=0}^n\sum\limits_{j=0}^{\lfloor\frac{ai+b}c\rfloor-1}1
\end{aligned}\)
为了方便,设 \(m=\lfloor\frac{an+b}c\rfloor\)
\(
\begin{aligned}
原式=\sum\limits_{j=0}^{m-1}\sum\limits_{i=0}^n[j<\lfloor\frac{ai+b}c\rfloor]
\end{aligned}\)
给这个式子略微变一下形
\(\begin{aligned} \sum\limits_{j=0}^{m-1}\sum\limits_{i=0}^n[j<\lfloor\frac{ai+b}c\rfloor] &= \sum\limits_{j=0}^{m-1}\sum\limits_{i=0}^n[i>\lfloor\frac{cj+c-b-1}a\rfloor]\\&=\sum\limits_{i=0}^{m-1}n-\lfloor\frac{cj+c-b-1}a\rfloor\\&=nm-f(c,c-b-1,a,m-1) \end{aligned}\)
复杂度的话,因为这样每次将 \(a,c\) 交换,然后取模,这样的形式和欧几里得算法极其相似,复杂度是 \(O(\log a)\) 的。同时递归边界是 \(a=0\),答案就不用讲了吧。
题目
来看一下进阶版
\(g(a,b,c,n)=\sum\limits_{i=0}^ni\lfloor\frac{ai+b}c\rfloor\)
\(h(a,b,c,n)=\sum\limits_{i=0}^n\lfloor\frac{ai+b}c\rfloor^2\)
题解
\(\begin{aligned} a\ge c,b\ge c\\ g(a,b,c,n)&=\sum\limits_{i=0}^ni\lfloor\tfrac{\lfloor\frac ac\rfloor ci+a\bmod ci +\lfloor\frac bc\rfloor c+b\bmod c}c\rfloor\\&=\lfloor\frac ac\rfloor\frac 16n(n+1)(2n+1)+\frac 12n(n+1)\lfloor\frac bc\rfloor+g(a\bmod c,b\bmod c,c,n)\\ h(a,b,c,n)&=\sum\limits_{i=0}^n(\lfloor\frac{(a\bmod c)i+b\bmod c}c\rfloor+\lfloor\frac ac\rfloor i+\lfloor\frac bc\rfloor)^2\\&=h(a\bmod c,b\bmod c,c,n)+\lfloor\frac ac\rfloor^2\frac16n(n+1)(2n+1)+(n+1)\lfloor\frac bc\rfloor^2+n(n+1)\lfloor\frac ac\rfloor\lfloor\frac bc\rfloor+2\lfloor\frac ac\rfloor g(a\bmod c,b\bmod c,c,n)+2\lfloor\frac bc\rfloor f(a\bmod c,b\bmod c,c,n)\\ a<c,b<c\\ g(a,b,c,n)&=\sum\limits_{i=0}^n\sum\limits_{j=0}^{\lfloor\frac{ai+b}c\rfloor-1}i\\&=\sum\limits_{i=0}^{\lfloor\frac{an+b}c\rfloor-1}\sum\limits_{j=0}^nj[i<\lfloor\frac{aj+b}c\rfloor]\\&=\sum\limits_{i=0}^{\lfloor\frac{an+b}c\rfloor-1}\sum\limits_{j=0}^nj[\lfloor\frac{ci+c-b}a\rfloor<j]\\ m=\lfloor\frac{an+b}c\rfloor\\ &=\frac12(mn(n+1)-h(c,c-b-1,a,m-1)-f(c,c-b-1,a,m-1))\\ h(a,b,c,n)&=2\sum\limits_{i=0}^n\sum\limits_{j=1}^{\lfloor\frac{ai+b}c\rfloor}j-\sum\limits_{i=0}^n\lfloor\frac{ai+b}c\rfloor\\&=2\sum\limits_{i=0}^{m-1}(i+1)(n-\lfloor\frac{jc+c-b-1}c\rfloor)-f(a,b,c,n)\\&=nm(m+1)-f(a,b,c,n)-2g(c,c-b-1,a,m-1)-2f(c,c-b-1,a,m-1) \end{aligned}\)