类欧几里得算法
类欧几里得算法
用于解一些神奇式子,形如:
\[f(a,b,c,d)=\sum\limits_{i=0}^{n}\lfloor{\frac{ai+b}{c}}\rfloor
\]
\[g(a,b,c,d)=\sum\limits_{i=0}^{n}i*\lfloor{\frac{ai+b}{c}}\rfloor
\]
\[h(a,b,c,d)=\sum\limits_{i=0}^{n}\lfloor{\frac{ai+b}{c}}\rfloor^2
\]
其求值与求 \(gcd\) 所用的欧几里得算法类似,因此称之为类欧几里得算法。
求 \(f\) :
我们希望可以递归计算,那么对于 \(a,b\) 关于 \(c\) 的大小关系去分类讨论。
1.\(a \geq c\ or\ b \geq c :\)
我们考虑把烦人的向下取整化掉。
\[\lfloor{\frac{ai+b}{c}}\rfloor\to\lfloor{\frac{(a\%c)*i+b\%c}{c}}\rfloor+\lfloor\frac{a}{c}\rfloor*i+\lfloor\frac{b}{c}\rfloor
\]
那么有
\[f(a,b,c,n)=\sum_{i= 0}^{n}\left \lfloor \frac{ai + b}{c} \right \rfloor
\]
\[=\sum_{i = 0}^{n}\left \lfloor \frac{(\left \lfloor \frac{a}{c} \right \rfloor c +a\%{c})i + \left \lfloor \frac{b}{c} \right \rfloor c + b\%{c} }{c} \right \rfloor\\
\]
\[= \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 \frac{(a\%{c})i + b \%{c} }{c} \right \rfloor
\]
2.\(a<c \ and \ b<c\)
设
\[m=\lfloor\frac{an+b}{c}\rfloor
\]
有
\[f(a,b,c,n)=\sum\limits_{i=0}^{n}\sum\limits_{j=1}^{m}[j\le\lfloor\frac{ai+b}{c}\rfloor]
\]
\[=\sum\limits_{i=0}^{n}\sum\limits_{j=0}^{m-1}[j+1\le\lfloor\frac{ai+b}{c}\rfloor]
\]
\[=\sum\limits_{i=0}^{n}\sum\limits_{j=0}^{m-1}[i>\lfloor\frac{jc+c-b-1}{a}\rfloor]
\]
\[=\sum\limits_{j=0}^{m-1} n-\lfloor\frac{jc+c-b-1}{a}\rfloor
\]
\[=nm-f(c,c-b-1,a,m-1)
\]
即
\[f(a,b,c,n)=nm-f(c,c-b-1,a,m-1)
\]
即为
\[f(a,b,c,n)=n\lfloor\frac{ai+b}{c}\rfloor-f(c,c-b-1,a,\lfloor\frac{ai+b}{c}\rfloor-1)
\]
就是\(a=c,c=a%c\),递归边界为\(a=0\)
那么
\[f(x)=
\begin{cases}
\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 \frac{(a\%{c})i + b \%{c} }{c} \right \rfloor,\quad a \geq c\ or\ b \geq c \\ f(a,b,c,n)=n\lfloor\frac{ai+b}{c}\rfloor-f(c,c-b-1,a,\lfloor\frac{ai+b}{c}\rfloor-1), \quad a<c \ and \ b<c
\end{cases}
\]
求\(g\):
和求 \(f\) 类似套路,分类讨论即可
1.\(a \ge c \ or \ b \ge c\)
有个小结论会用到
\[\sum\limits_{i=1}^{n}i^2=\frac{n(n+1)(2n+1)}{6}
\]
那么和求 \(f\) 一样去掉整除即可
即
\[g(a,b,c,n)=g(a\%c,b\%c,c,n)+\frac{n(n+1)(2n+1)}{6}\lfloor\frac{a}{c}\rfloor+\frac{n(n+1)}{2}\lfloor\frac{b}{c}\rfloor
\]
2.\(a<c \ and \ b<c\)
那么同样的,设
\[m=\lfloor\frac{an+b}{c}\rfloor
\]
有
\[g(a,b,c,n)=\sum\limits_{i=0}^{n}i\sum\limits_{j=1}^{m}[j\le\lfloor\frac{ai+b}{c}\rfloor]
\]
\[=\sum\limits_{i=0}^{n}i\sum\limits_{j=0}^{m-1}[i>\lfloor\frac{jc+c-b-1}{a}\rfloor]
\]
那么显然这里面有一个等差数列
得
\[g(a,b,c,n)=\sum\limits_{j=0}^{m-1}\lfloor\frac{(\lfloor\frac{jc+c-b-1}{a}\rfloor+1+n)(n-\lfloor\frac{jc+c-b-1}{a}\rfloor)}{2}\rfloor
\]
\[=\lfloor \frac{mn(n+1)-f(c,c-b-1,a,m-1)-h(c,c-b-1,a,m-1)}{2} \rfloor
\]
即
\[g(a,b,c,n)=
\lfloor \frac{\lfloor\frac{an+b}{c}\rfloor n(n+1)-f(c,c-b-1,a,\lfloor\frac{an+b}{c}\rfloor-1)-h(c,c-b-1,a,\lfloor\frac{an+b}{c}\rfloor-1)}{2} \rfloor
\]
好了开始套娃
那么即为
\[g(x)=
\begin{cases}
g(a\%c,b\%c,c,n)+\frac{n(n+1)(2n+1)}{6}\lfloor\frac{a}{c}\rfloor+\frac{n(n+1)}{2}\lfloor\frac{b}{c}\rfloor,
\quad a \ge c\ or\ b \ge c \\
\lfloor \frac{\lfloor\frac{an+b}{c}\rfloor n(n+1)-f(c,c-b-1,a,\lfloor\frac{an+b}{c}\rfloor-1)-h(c,c-b-1,a,\lfloor\frac{an+b}{c}\rfloor-1)}{2} \rfloor,
\quad a<c \ and \ b<c
\end{cases}
\]
求\(h\):
推导过程:仁者见仁智者见智罢!
\[h(x)=
\begin{cases}
h(a\%c,b\%c,c,n)+2\lfloor\frac{b}{c}\rfloor f(a\%c,b\%c,c,n)+2\lfloor\frac{a}{c}\rfloor f(a\%c,b\%c,c,n)+\frac{n(n+1)(2n+1)}{6}\lfloor\frac{a}{c}\rfloor^2+n(n+1)\lfloor\frac{a}{c}\rfloor\lfloor\frac{b}{c}\rfloor+(n+1)\lfloor\frac{b
}{c}\rfloor^2,
\quad a \ge c\ or\ b \ge c \\
n\lfloor\frac{an+b}{c}\rfloor(\lfloor\frac{an+b}{c}\rfloor+1)-2f(c,c-b-1,a,\lfloor\frac{an+b}{c}\rfloor-1)-2g(c,c-b-1,a,\lfloor\frac{an+b}{c}\rfloor-1)-f(a,b,c,n),
\quad a<c \ and \ b<c
\end{cases}
\]
终

浙公网安备 33010602011771号