类欧几里得算法

类欧几里得算法

用于解一些神奇式子,形如:

\[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} \]

posted @ 2022-07-20 17:18  Ztemily  阅读(129)  评论(3)    收藏  举报