类欧几里德算法

引入

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) \]

然后只需要搞一个函数这仨玩意来回倒腾。

代码

posted @ 2025-10-20 21:11  zxh923  阅读(9)  评论(0)    收藏  举报