计算 ∑ i = 1 L A i B ⌊ P i + R Q ⌋ \sum_{i=1}^{L}A^{i}B^{\lfloor\frac{Pi+R}{Q}\rfloor} ∑i=1LAiB⌊QPi+R⌋
-
万能欧几里得算法:我们做直线 y = P i + R Q y=\frac{Pi+R}{Q} y=QPi+R 从 ( 0 , R / Q ) (0,R/Q) (0,R/Q) 开始走,维护一个三元组 ( a , b , c ) (a,b,c) (a,b,c),碰到上边界则将 b b b 左乘上 B B B,碰到左边界就把 a a a 右乘上 A A A,并更新答案 c ⇐ a ∗ b c\Leftarrow a*b c⇐a∗b
-
发现这个操作可以构成一个序列,形如 { B . B , A , B , B , B , A , B , B , A , B , B , B , A } \{B.B,A,B,B,B,A,B,B,A,B,B,B,A\} {B.B,A,B,B,B,A,B,B,A,B,B,B,A}
万能欧几里得算法可以将这个序列合并,压缩使得我们能快速得到答案
令 f ( n , p , q , r , a , b ) = ∑ i = 1 n A i B ⌊ p i + r q ⌋ f(n,p,q,r,a,b)=\sum_{i=1}^nA^{i}B^{\lfloor\frac{pi+r}{q}\rfloor} f(n,p,q,r,a,b)=∑i=1nAiB⌊qpi+r⌋,其中 a , b a,b a,b 表示我们的一段序列 -
若 p ≥ q p\ge q p≥q,则发现一个 A A A 前面一定有 ⌊ p q ⌋ \lfloor\frac{p}{q}\rfloor ⌊qp⌋ 个 B B B
于是我们可以令 A ′ = B ∗ ⌊ p q ⌋ + A A'=B*\lfloor\frac{p}{q}\rfloor+A A′=B∗⌊qp⌋+A,实现了序列的压缩 -
若 p < q p<q p<q,我们可以通过变换使其变为 p ≥ q p\ge q p≥q 的情况,这个变换就叫做坐标旋转
我们考虑求出 y = ⌊ p x + r q ⌋ y=\lfloor\frac{px+r}{q}\rfloor y=⌊qpx+r⌋ 的反函数,即为解一个方程
y ≤ ⌊ p x + r q ⌋ < y + 1 q y − r ≤ p x < q y + q − r ⌊ q y − r + p − 1 p ⌋ ≤ x < ⌊ q y + q − r + p − 1 p ⌋ y\le \lfloor\frac{px+r}{q}\rfloor<y+1\\ qy-r\le px<qy+q-r\\ \lfloor\frac{qy-r+p-1}{p}\rfloor\le x< \lfloor\frac{qy+q-r+p-1}{p}\rfloor y≤⌊qpx+r⌋<y+1qy−r≤px<qy+q−r⌊pqy−r+p−1⌋≤x<⌊pqy+q−r+p−1⌋
那么若实现坐标翻转,某一个特定的 A A A 可以前可以有
⌊ q y + q − r − 1 p ⌋ − ⌊ q y − r − 1 p ⌋ \lfloor\frac{qy+q-r-1}{p}\rfloor-\lfloor\frac{qy-r-1}{p}\rfloor ⌊pqy+q−r−1⌋−⌊pqy−r−1⌋ 个 B B B,对比前面一个特定的 A A A前有 ⌊ p x + p + r q ⌋ − ⌊ p x + r q ⌋ \lfloor\frac{px+p+r}{q}\rfloor-\lfloor\frac{px+r}{q}\rfloor ⌊qpx+p+r⌋−⌊qpx+r⌋,那么新的直线可以写作 x = q y − r − 1 p x=\frac{qy-r-1}{p} x=pqy−r−1
注意分母无论减去多少个分子都不会影响操作序列
然后这里的定义域要映射成值域, y = 1 y=1 y=1 时不能取满所以我们单独计算,所以新的定义域变成了 ( 1 , 、 ⌊ p n + r q ⌋ ] (1,、\lfloor\frac{pn+r}{q}\rfloor] (1,、⌊qpn+r⌋],同时定义域后方还有一些点没有算到,同样单独计算
然后我们就可以递归到 f ( ⌊ p n + r q ⌋ − 1 , q , p , q − r − 1 , b , a ) f(\lfloor\frac{pn+r}{q}\rfloor-1,q,p,q-r-1,b,a) f(⌊qpn+r⌋−1,q,p,q−r−1,b,a) 来计算
C o d e Code Code -
既然它是万能的,那么我们可以顺手切掉一道 【模板】类欧几里得算法
维护一个 5 元组 ( i , ⌊ a i + b c ⌋ , ∑ ⌊ a i + b c ⌋ , ∑ ⌊ a i + b c ⌋ 2 ∑ i ⌊ a i + b c ⌋ ) (i,\lfloor \frac{ai+b}{c}\rfloor,\sum\lfloor \frac{ai+b}{c}\rfloor,\sum \lfloor \frac{ai+b}{c}\rfloor^2\sum i \lfloor \frac{ai+b}{c}\rfloor) (i,⌊cai+b⌋,∑⌊cai+b⌋,∑⌊cai+b⌋2∑i⌊cai+b⌋) 合并的时候拆项讨论就做完了
比类欧几里得好写到哪里去了,不过脑子够笨还是码了好久
C o d e Code Code