类欧几里得算法
用于解一些神奇式子,形如:
$ { 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 : $
我们考虑把烦人的向下取整化掉。
⌊cai+b⌋→⌊c(amodc)∗i+bmodc⌋+⌊ca⌋∗i+⌊cb⌋
那么有
f(a,b,c,n)=i=0∑n⌊cai+b⌋
=i=0∑n⌊c(⌊ca⌋c+amodc)i+⌊cb⌋c+bmodc⌋
=2n(n+1)⌊ca⌋+(n+1)⌊cb⌋+i=0∑n⌊c(amodc)i+bmodc⌋
2.a<c and b<c
设
m=⌊can+b⌋
有
f(a,b,c,n)=i=0∑nj=1∑m[j≤⌊cai+b⌋]
=i=0∑nj=0∑m−1[j+1≤⌊cai+b⌋]
=i=0∑nj=0∑m−1[i>⌊ajc+c−b−1⌋]
=j=0∑m−1n−⌊ajc+c−b−1⌋
=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⌊cai+b⌋−f(c,c−b−1,a,⌊cai+b⌋−1)
就是a=c,c=amodc,递归边界为a=0
那么
f(x)={2n(n+1)⌊ca⌋+(n+1)⌊cb⌋+∑i=0n⌊c(amodc)i+bmodc⌋,a≥c or b≥cf(a,b,c,n)=n⌊cai+b⌋−f(c,c−b−1,a,⌊cai+b⌋−1),a<c and b<c
求g:
和求 f 类似套路,分类讨论即可
1.a≥c or b≥c
有个小结论会用到
i=1∑ni2=6n(n+1)(2n+1)
那么和求 f 一样去掉整除即可
即
g(a,b,c,n)=g(amodc,bmodc,c,n)+6n(n+1)(2n+1)⌊ca⌋+2n(n+1)⌊cb⌋
2.a<c and b<c
那么同样的,设
m=⌊can+b⌋
有
g(a,b,c,n)=i=0∑nij=1∑m[j≤⌊cai+b⌋]
=i=0∑nij=0∑m−1[i>⌊ajc+c−b−1⌋]
那么显然这里面有一个等差数列
得
g(a,b,c,n)=j=0∑m−1⌊2(⌊ajc+c−b−1⌋+1+n)(n−⌊ajc+c−b−1⌋)⌋
=⌊2mn(n+1)−f(c,c−b−1,a,m−1)−h(c,c−b−1,a,m−1)⌋
即
g(a,b,c,n)=⌊2⌊can+b⌋n(n+1)−f(c,c−b−1,a,⌊can+b⌋−1)−h(c,c−b−1,a,⌊can+b⌋−1)⌋
好了开始套娃
那么即为
g(x)={g(amodc,bmodc,c,n)+6n(n+1)(2n+1)⌊ca⌋+2n(n+1)⌊cb⌋,a≥c or b≥c⌊2⌊can+b⌋n(n+1)−f(c,c−b−1,a,⌊can+b⌋−1)−h(c,c−b−1,a,⌊can+b⌋−1)⌋,a<c and b<c
求h:
推导过程:仁者见仁智者见智罢!
h(x)={h(amodc,bmodc,c,n)+2⌊cb⌋f(amodc,bmodc,c,n)+2⌊ca⌋f(amodc,bmodc,c,n)+6n(n+1)(2n+1)⌊ca⌋2+n(n+1)⌊ca⌋⌊cb⌋+(n+1)⌊cb⌋2,a≥c or b≥cn⌊can+b⌋(⌊can+b⌋+1)−2f(c,c−b−1,a,⌊can+b⌋−1)−2g(c,c−b−1,a,⌊can+b⌋−1)−f(a,b,c,n),a<c and b<c
终