类欧几里德算法
引入
Floor Sum
令 \(f(a,b,c,n)=\displaystyle \sum_{i=0}^{n}\lfloor\dfrac{a\times i+b}{c}\rfloor\)。我们要求的就是这个东西。
考虑如果 \(a,b\) 中有一个大于等于 \(c\)。那么有:
\[f(a,b,c,n)=\sum_{i=0}^{n}\lfloor\dfrac{ai+b}{c}\rfloor
\]
\[=\sum_{i=0}^{n}\lfloor\dfrac{(\lfloor\dfrac{a}{c}\rfloor c+a\bmod c)i+(\lfloor\dfrac{b}{c}\rfloor c+b\bmod c)}{c}\rfloor
\]
\[=\sum_{i=0}^{n}\lfloor\dfrac{a}{c}\rfloor i+\lfloor\dfrac{b}{c}\rfloor+\lfloor\dfrac{(a\bmod c)i+b\bmod c}{c}\rfloor
\]
\[=\dfrac{n(n+1)}{2}\lfloor\dfrac{a}{c}\rfloor+(n+1)\lfloor\dfrac{b}{c}\rfloor+f(a\bmod c,b\bmod c,c,n)
\]
否则,我们考虑令 \(m=\lfloor\dfrac{an+b}{c}\rfloor\)。
\[\sum_{i=0}^{n}\lfloor\dfrac{ai+b}{c}\rfloor=\sum_{i=0}^{n}\sum_{j=0}^{m-1}[j<\lfloor\dfrac{ai+b}{c}\rfloor]
\]
然后开始进行严肃等价变形。
\[j<\lfloor\dfrac{ai+b}{c}\rfloor=\lceil\dfrac{ai+b+1}{c}\rceil-1\iff j+1<\lceil\dfrac{ai+b+1}{c}\rceil
\]
\[\iff j+1<\dfrac{ai+b+1}{c}\iff \dfrac{cj+c-b-1}{a}<i\iff \lfloor\dfrac{cj+c-b-1}{a}\rfloor<i
\]
于是我们可以推出:
\[f(a,b,c,n)=\sum_{j=0}^{m-1}\sum_{i=0}^{n}[i>\lfloor\dfrac{cj+c-b-1}{a}\rfloor]
\]
\[=\sum_{j=0}^{m-1}(n-\lfloor\dfrac{cj+c-b-1}{a}\rfloor)=nm-f(c,c-b-1,a,m-1)
\]
然后就只需要用这两个东西来回倒腾就行了,复杂度大约是 \(\log\) 量级的。
板子
模板
我们分别令这三个东西是 \(f(a,b,c,n),g(a,b,c,n),h(a,b,c,n)\)。
\(f\) 的推导我们上面已经说过了。下面说一下 \(g,h\)。
首先还是 \(a,b\) 中有一个大于等于 \(c\) 的情况。
\[g(a,b,c,n)=g(a\bmod c,b\bmod c,c,n)+\lfloor\dfrac{a}{c}\rfloor \dfrac{n(n+1)(2n+1)}{6}+\lfloor\dfrac{b}{c}\rfloor\dfrac{n(n+1)}{2}
\]
\[h(a,b,c,n)=h(a\bmod c,b\bmod c,c,n)+2\lfloor\dfrac{b}{c}\rfloor f(a\bmod c,b\bmod c,c,n)+2\lfloor\dfrac{a}{c}\rfloor g(a\bmod c,b\bmod c,c,n)
\]
\[+\lfloor\dfrac{a}{c}\rfloor^2 \dfrac{n(n+1)(2n+1)}{6}+\lfloor\dfrac{b}{c}\rfloor^2(n+1)+\lfloor\dfrac{a}{c}\rfloor\lfloor\dfrac{b}{c}\rfloor n(n+1)
\]
同时,我们令 \(m=\lfloor\dfrac{an+b}{c}\rfloor\)。
\[g(a,b,c,n)=\sum_{i=0}^{n}i\lfloor\dfrac{ai+b}{c}\rfloor
\]
\[=\sum_{i=0}^{n}\sum_{j=0}^{m-1}i[j<\lfloor\dfrac{ai+b}{c}\rfloor]
\]
\[=\sum_{j=0}^{m-1}\sum_{i=0}^{n}i[i>\lfloor\dfrac{cj+c-b-1}{a}\rfloor]
\]
\[=\sum_{j=0}^{m-1}\dfrac{1}{2}(\lfloor\dfrac{cj+c-b-1}{a}\rfloor+n-1)(n-\lfloor\dfrac{cj+c-b-1}{a}\rfloor)
\]
\[=\dfrac{1}{2}mn(n+1)-\dfrac{1}{2}\sum_{j=0}^{m-1}\lfloor\dfrac{cj+c-b-1}{a}\rfloor-\dfrac{1}{2}\sum_{j=0}^{m-1}\lfloor\dfrac{cj+c-b-1}{a}\rfloor^2
\]
\[=\dfrac{1}{2}mn(n+1)-\dfrac{1}{2}f(c,c-b-1,a,m-1)-\dfrac{1}{2}h(c,c-b-1,a,m-1)
\]
\[h(a,b,c,n)=\sum_{i=0}^{n}\lfloor\dfrac{ai+b}{c}\rfloor^2
\]
\[=\sum_{i=0}^{n}\sum_{j=0}^{m-1}(2j+1)[j<\lfloor\dfrac{ai+b}{c}\rfloor]
\]
\[=\sum_{j=0}^{m-1}\sum_{i=0}^{n}(2j+1)[i>\lfloor\dfrac{cj+c-b-1}{a}\rfloor]
\]
\[=\sum_{j=0}^{m-1}(2j+1)(n-\lfloor\dfrac{cj+c-b-1}{a}\rfloor
\]
\[=nm^2-\sum_{j=0}^{m-1}\lfloor\dfrac{cj+c-b-1}{a}\rfloor-2\sum_{j=0}^{m-1}j\lfloor\dfrac{cj+c-b-1}{a}\rfloor
\]
\[=nm^2-f(c,c-b-1,a,m-1)-2g(c,c-b-1,a,m-1)
\]
然后只需要搞一个函数这仨玩意来回倒腾。

浙公网安备 33010602011771号