本文数学公式较长,建议在屏幕较大的设备上阅读。
简介
类欧几里德算法即使用与欧几里德算法类似的思想解决一类求和式的计算问题。可用类欧几里德算法解决的求和式主要有以下三种:
f ( a , b , c , n ) = ∑ i = 0 n ⌊ a i + b c ⌋ g ( a , b , c , n ) = ∑ i = 0 n i ⌊ a i + b c ⌋ h ( a , b , c , n ) = ∑ i = 0 n ⌊ a i + b c ⌋ 2
\begin{aligned}
f(a, b, c, n) & = \sum\limits_{i = 0}^{n} {\left\lfloor \frac{ai + b}{c} \right\rfloor} \\
g(a, b, c, n) & = \sum\limits_{i = 0}^{n} {i \left\lfloor \frac{ai + b}{c} \right\rfloor} \\
h(a, b, c, n) & = \sum\limits_{i = 0}^{n} {\left\lfloor \frac{ai + b}{c} \right\rfloor}^2
\end{aligned}
f ( a , b , c , n ) g ( a , b , c , n ) h ( a , b , c , n ) = i = 0 ∑ n ⌊ c ai + b ⌋ = i = 0 ∑ n i ⌊ c ai + b ⌋ = i = 0 ∑ n ⌊ c ai + b ⌋ 2
后文中将简称它们为 f f f
式,g g g
式与 h h h
式。
引理
考虑 a , b , c a, b, c a , b , c
均为非负整数。
a ≤ ⌊ c b ⌋ ⇔ a b ≤ c
a \le \left\lfloor \frac{c}{b} \right\rfloor \Leftrightarrow ab \le c
a ≤ ⌊ b c ⌋ ⇔ ab ≤ c
证明比较显然,这里就略去了。
a < ⌊ c b ⌋ ⇔ a b < c − b + 1
a < \left\lfloor \frac{c}{b} \right\rfloor \Leftrightarrow ab < c - b + 1
a < ⌊ b c ⌋ ⇔ ab < c − b + 1
下面给出简略证明过程:
a < ⌊ c b ⌋ ⇔ a ≤ ⌊ c b ⌋ − 1 ⇔ a b ≤ c − b ⇔ a b < c − b + 1
\begin{aligned}
a < \left\lfloor \frac{c}{b} \right\rfloor
& \Leftrightarrow a \le \left\lfloor \frac{c}{b} \right\rfloor - 1 \\
& \Leftrightarrow ab \le c - b \\
& \Leftrightarrow ab < c - b + 1
\end{aligned}
a < ⌊ b c ⌋ ⇔ a ≤ ⌊ b c ⌋ − 1 ⇔ ab ≤ c − b ⇔ ab < c − b + 1
n 2 = 2 ⋅ 1 2 ( n − 1 ) n + n = 2 ∑ i = 0 n − 1 i + n
\begin{aligned}
n^2
= & 2 \cdot \frac{1}{2}(n - 1)n + n \\
= & 2 \sum\limits_{i = 0}^{n - 1} {i} + n
\end{aligned}
n 2 = = 2 ⋅ 2 1 ( n − 1 ) n + n 2 i = 0 ∑ n − 1 i + n
在后面的推导中可能会不加证明地使用上述三个结论。
f 式
形式
f ( a , b , c , n ) = ∑ i = 0 n ⌊ a i + b c ⌋
f(a, b, c, n) = \sum\limits_{i = 0}^{n} {\left\lfloor \frac{ai + b}{c} \right\rfloor}
f ( a , b , c , n ) = i = 0 ∑ n ⌊ c ai + b ⌋
推导
首先我们考虑求和式中每一项都大于 0 0 0
的情况,即当 a ≥ c a \ge c a ≥ c
或 b ≥ c b \ge c b ≥ c
时:
f ( a , b , c , n ) = ∑ i = 0 n ⌊ a i + b c ⌋ = ∑ i = 0 n [ ⌊ a c ⌋ i + ⌊ b c ⌋ + ⌊ ( a m o d c ) i + ( b m o d c ) c ⌋ ] = ⌊ a c ⌋ ∑ i = 0 n i + ⌊ b c ⌋ ∑ i = 0 n 1 + ∑ i = 0 n ⌊ ( a m o d c ) i + ( b m o d c ) c ⌋ = ⌊ a c ⌋ 1 2 n ( n + 1 ) + ⌊ b c ⌋ ( n + 1 ) + f ( a m o d c , b m o d c , c , n )
\begin{aligned}
f(a, b, c, n)
& = \sum\limits_{i = 0}^{n} {\left\lfloor \frac{ai + b}{c} \right\rfloor} \\
& = \sum\limits_{i = 0}^{n} {\left[ \left\lfloor \frac{a}{c} \right\rfloor i + \left\lfloor \frac{b}{c} \right\rfloor + \left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor \right]} \\
& = \left\lfloor \frac{a}{c} \right\rfloor \sum\limits_{i = 0}^{n} {i} + \left\lfloor \frac{b}{c} \right\rfloor \sum\limits_{i = 0}^{n} {1} + \sum\limits_{i = 0}^{n} {\left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor} \\
& = \left\lfloor \frac{a}{c} \right\rfloor \frac{1}{2}n(n + 1) + \left\lfloor \frac{b}{c} \right\rfloor (n + 1) + f(a \bmod c, b \bmod c, c, n)
\end{aligned}
f ( a , b , c , n ) = i = 0 ∑ n ⌊ c ai + b ⌋ = i = 0 ∑ n [ ⌊ c a ⌋ i + ⌊ c b ⌋ + ⌊ c ( a mod c ) i + ( b mod c ) ⌋ ] = ⌊ c a ⌋ i = 0 ∑ n i + ⌊ c b ⌋ i = 0 ∑ n 1 + i = 0 ∑ n ⌊ c ( a mod c ) i + ( b mod c ) ⌋ = ⌊ c a ⌋ 2 1 n ( n + 1 ) + ⌊ c b ⌋ ( n + 1 ) + f ( a mod c , b mod c , c , n )
接下来我们考虑存在某些项等于 0 0 0
的情况,即当 a , b < c a, b < c a , b < c
时:
f ( a , b , c , n ) = ∑ i = 0 n ⌊ a i + b c ⌋ = ∑ i = 0 n ∑ j = 0 ⌊ a i + b c ⌋ − 1 1 = ∑ j = 0 ⌊ a n + b c ⌋ − 1 ∑ i = 0 n ( j ≤ ⌊ a i + b c ⌋ − 1 ) = ∑ j = 0 ⌊ a n + b c ⌋ − 1 ∑ i = 0 n ( j < ⌊ a i + b c ⌋ )
\begin{aligned}
f(a, b, c, n)
& = \sum\limits_{i = 0}^{n} {\left\lfloor \frac{ai + b}{c} \right\rfloor} \\
& = \sum\limits_{i = 0}^{n} \sum\limits_{j = 0}^{\left\lfloor \frac{ai + b}{c} \right\rfloor - 1} {1} \\
& = \sum_{j = 0}^{\left\lfloor \frac{an + b}{c} \right\rfloor - 1} \sum\limits_{i = 0}^{n} {(j \le \left\lfloor \frac{ai + b}{c} \right\rfloor - 1)} \\
& = \sum_{j = 0}^{\left\lfloor \frac{an + b}{c} \right\rfloor - 1} \sum\limits_{i = 0}^{n} {(j < \left\lfloor \frac{ai + b}{c} \right\rfloor)}
\end{aligned}
f ( a , b , c , n ) = i = 0 ∑ n ⌊ c ai + b ⌋ = i = 0 ∑ n j = 0 ∑ ⌊ c ai + b ⌋ − 1 1 = j = 0 ∑ ⌊ c an + b ⌋ − 1 i = 0 ∑ n ( j ≤ ⌊ c ai + b ⌋ − 1 ) = j = 0 ∑ ⌊ c an + b ⌋ − 1 i = 0 ∑ n ( j < ⌊ c ai + b ⌋ )
我们不妨令 m = ⌊ a n + b c ⌋ m = \left\lfloor \frac{an + b}{c} \right\rfloor m = ⌊ c an + b ⌋
,则有:
f ( a , b , c , n ) = ∑ j = 0 m − 1 ∑ i = 0 n ( j < ⌊ a i + b c ⌋ ) = ∑ j = 0 m − 1 ∑ i = 0 n [ c j < ( a i + b ) − c + 1 ] = ∑ j = 0 m − 1 ∑ i = 0 n ( i > ⌊ c j + c − b − 1 a ⌋ )
\begin{aligned}
f(a, b, c, n)
& = \sum_{j = 0}^{m - 1} \sum\limits_{i = 0}^{n} {(j < \left\lfloor \frac{ai + b}{c} \right\rfloor)} \\
& = \sum_{j = 0}^{m - 1} \sum\limits_{i = 0}^{n} {\left[ cj < (ai + b) - c + 1 \right]} \\
& = \sum\limits_{j = 0}^{m - 1} \sum\limits_{i = 0}^{n} {(i > \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor)}
\end{aligned}
f ( a , b , c , n ) = j = 0 ∑ m − 1 i = 0 ∑ n ( j < ⌊ c ai + b ⌋ ) = j = 0 ∑ m − 1 i = 0 ∑ n [ c j < ( ai + b ) − c + 1 ] = j = 0 ∑ m − 1 i = 0 ∑ n ( i > ⌊ a c j + c − b − 1 ⌋ )
不难发现,∑ i = 0 n ( ⌊ c j + c − b − 1 a ⌋ < i ) \sum\limits_{i = 0}^{n} {(\left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor < i)} i = 0 ∑ n ( ⌊ a c j + c − b − 1 ⌋ < i )
即为 n − ⌊ c j + c − b − 1 a ⌋ n - \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor n − ⌊ a c j + c − b − 1 ⌋
。故有:
f ( a , b , c , n ) = ∑ j = 0 m − 1 ( n − ⌊ c j + c − b − 1 a ⌋ ) = n m − ∑ j = 0 m − 1 ⌊ c j + c − b − 1 a ⌋ = n m − f ( c , c − b − 1 , a , m − 1 )
\begin{aligned}
f(a, b, c, n)
& = \sum\limits_{j = 0}^{m - 1} {(n - \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor)} \\
& = nm - \sum\limits_{j = 0}^{m - 1} {\left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor} \\
& = nm - f(c, c - b - 1, a, m - 1)
\end{aligned}
f ( a , b , c , n ) = j = 0 ∑ m − 1 ( n − ⌊ a c j + c − b − 1 ⌋ ) = nm − j = 0 ∑ m − 1 ⌊ a c j + c − b − 1 ⌋ = nm − f ( c , c − b − 1 , a , m − 1 )
现在假设我们有 f ( a , b , c , n ) f(a, b, c, n) f ( a , b , c , n )
,其中 a ≥ c a \ge c a ≥ c
。经过情况 1 1 1
中的一次运算后
( a , b , c , n ) (a, b, c, n) ( a , b , c , n )
变为 ( a m o d c , b m o d c , c , n ) (a \bmod c, b \bmod c, c, n) ( a mod c , b mod c , c , n )
。此时我们再应用情况 2 2 2
进行一次运算四个参数就变成了
( c , c − b m o d c − 1 , a m o d c , m − 1 ) (c, c - b \bmod c - 1, a \bmod c, m - 1) ( c , c − b mod c − 1 , a mod c , m − 1 )
。我们注意观察第 1 1 1
个参数和第 3 3 3
个参数,经过上述两次运算后由 ( a , c ) (a, c) ( a , c )
变成了
( c , a m o d c ) (c, a \bmod c) ( c , a mod c )
。这与欧几里德算法存在极大的相似之处,因此我们把这种算法称作类欧几里德算法。至于时间复杂度,显然也是与欧几里德算法相同的,为
O ( log n ) \mathcal{O}(\log{n}) O ( log n )
级别。
结论
令 m = ⌊ a n + b c ⌋ m = \left\lfloor \frac{an + b}{c} \right\rfloor m = ⌊ c an + b ⌋
,有:
f ( a , b , c , n ) = { ⌊ a c ⌋ n ( n + 1 ) 2 + ⌊ b c ⌋ ( n + 1 ) + f ( a m o d c , b m o d c , c , n ) a ≥ c ∨ b ≥ c n m − f ( c , c − b − 1 , a , m − 1 ) otherwise
f(a, b, c, n) =
\begin{cases}
\left\lfloor \frac{a}{c} \right\rfloor \frac{n(n + 1)}{2} + \left\lfloor \frac{b}{c} \right\rfloor (n + 1) & \\
+ f(a \bmod c, b \bmod c, c, n) & a \ge c \lor b \ge c \\
nm - f(c, c - b - 1, a, m - 1) & \text{otherwise}
\end{cases}
f ( a , b , c , n ) = ⎩ ⎨ ⎧ ⌊ c a ⌋ 2 n ( n + 1 ) + ⌊ c b ⌋ ( n + 1 ) + f ( a mod c , b mod c , c , n ) nm − f ( c , c − b − 1 , a , m − 1 ) a ≥ c ∨ b ≥ c otherwise
g 式
形式
g ( a , b , c , n ) = ∑ i = 0 n i ⌊ a i + b c ⌋
g(a, b, c, n) = \sum\limits_{i = 0}^{n} {i \left\lfloor \frac{ai + b}{c} \right\rfloor}
g ( a , b , c , n ) = i = 0 ∑ n i ⌊ c ai + b ⌋
推导
若 a ≥ c a \ge c a ≥ c
或 b ≥ c b \ge c b ≥ c
,有:
g ( a , b , c , n ) = ∑ i = 0 n i ⌊ a i + b c ⌋ = ∑ i = 0 n i ⋅ ( ⌊ a c ⌋ i + ⌊ b c ⌋ + ⌊ ( a m o d c ) i + ( b m o d c ) c ⌋ ) = ⌊ a c ⌋ ∑ i = 0 n i 2 + ⌊ b c ⌋ ∑ i = 0 n i + ∑ i = 0 n i ⌊ ( a m o d c ) i + ( b m o d c ) c ⌋ = ⌊ a c ⌋ 1 6 n ( n + 1 ) ( 2 n + 1 ) + ⌊ b c ⌋ 1 2 n ( n + 1 ) + g ( a m o d c , b m o d c , c , n )
\begin{aligned}
g(a, b, c, n) & = \sum\limits_{i = 0}^{n} {i \left\lfloor \frac{ai + b}{c} \right\rfloor} \\
& = \sum\limits_{i = 0}^{n} {i \cdot ( \left\lfloor \frac{a}{c} \right\rfloor i + \left\lfloor \frac{b}{c} \right\rfloor + \left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor)} \\
& = \left\lfloor \frac{a}{c} \right\rfloor \sum\limits_{i = 0}^{n} {i^2} + \left\lfloor \frac{b}{c} \right\rfloor\sum\limits_{i = 0}^{n} {i} + \sum\limits_{i = 0}^{n} {i \left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor} \\
& = \left\lfloor \frac{a}{c} \right\rfloor \frac{1}{6}n(n + 1)(2n + 1) + \left\lfloor \frac{b}{c} \right\rfloor \frac{1}{2}n(n + 1) + g(a \bmod c, b \bmod c, c, n)
\end{aligned}
g ( a , b , c , n ) = i = 0 ∑ n i ⌊ c ai + b ⌋ = i = 0 ∑ n i ⋅ ( ⌊ c a ⌋ i + ⌊ c b ⌋ + ⌊ c ( a mod c ) i + ( b mod c ) ⌋ ) = ⌊ c a ⌋ i = 0 ∑ n i 2 + ⌊ c b ⌋ i = 0 ∑ n i + i = 0 ∑ n i ⌊ c ( a mod c ) i + ( b mod c ) ⌋ = ⌊ c a ⌋ 6 1 n ( n + 1 ) ( 2 n + 1 ) + ⌊ c b ⌋ 2 1 n ( n + 1 ) + g ( a mod c , b mod c , c , n )
若 a , b < c a, b < c a , b < c
,有:
g ( a , b , c , n ) = ∑ i = 0 n i ⌊ a i + b c ⌋ = ∑ i = 0 n ∑ j = 0 ⌊ a i + b c ⌋ − 1 i = ∑ j = 0 ⌊ a n + b c ⌋ − 1 ∑ i = 0 n i ⋅ ( j ≤ ⌊ a i + b c ⌋ − 1 ) = ∑ j = 0 ⌊ a n + b c ⌋ − 1 ∑ i = 0 n i ⋅ ( j < ⌊ a i + b c ⌋ ) let m = ⌊ a n + b c ⌋ = ∑ j = 0 m − 1 ∑ i = 0 n i ⋅ ( j < ⌊ a i + b c ⌋ ) = ∑ j = 0 m − 1 ∑ i = 0 n i ⋅ [ c j < ( a i + b ) − c + 1 ] = ∑ j = 0 m − 1 ∑ i = 0 n i ⋅ ( i > ⌊ c j + c − b − 1 a ⌋ )
\begin{aligned}
g(a, b, c, n) & = \sum\limits_{i = 0}^{n} {i \left\lfloor \frac{ai + b}{c} \right\rfloor} \\
& = \sum\limits_{i = 0}^{n} \sum\limits_{j = 0}^{\left\lfloor \frac{ai + b}{c} \right\rfloor - 1} {i} \\
& = \sum_{j = 0}^{\left\lfloor \frac{an + b}{c} \right\rfloor - 1} \sum\limits_{i = 0}^{n} {i \cdot (j \le \left\lfloor \frac{ai + b}{c} \right\rfloor - 1)} \\
& = \sum_{j = 0}^{\left\lfloor \frac{an + b}{c} \right\rfloor - 1} \sum\limits_{i = 0}^{n} {i \cdot (j < \left\lfloor \frac{ai + b}{c} \right\rfloor)}
& \text{let } m = \left\lfloor \frac{an + b}{c} \right\rfloor \\
& = \sum_{j = 0}^{m - 1} \sum\limits_{i = 0}^{n} {i \cdot (j < \left\lfloor \frac{ai + b}{c} \right\rfloor)} \\
& = \sum_{j = 0}^{m - 1} \sum\limits_{i = 0}^{n} {i \cdot \left[ cj < (ai + b) - c + 1 \right]} \\
& = \sum_{j = 0}^{m - 1} \sum\limits_{i = 0}^{n} {i \cdot (i > \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor)}
\end{aligned}
g ( a , b , c , n ) = i = 0 ∑ n i ⌊ c ai + b ⌋ = i = 0 ∑ n j = 0 ∑ ⌊ c ai + b ⌋ − 1 i = j = 0 ∑ ⌊ c an + b ⌋ − 1 i = 0 ∑ n i ⋅ ( j ≤ ⌊ c ai + b ⌋ − 1 ) = j = 0 ∑ ⌊ c an + b ⌋ − 1 i = 0 ∑ n i ⋅ ( j < ⌊ c ai + b ⌋ ) = j = 0 ∑ m − 1 i = 0 ∑ n i ⋅ ( j < ⌊ c ai + b ⌋ ) = j = 0 ∑ m − 1 i = 0 ∑ n i ⋅ [ c j < ( ai + b ) − c + 1 ] = j = 0 ∑ m − 1 i = 0 ∑ n i ⋅ ( i > ⌊ a c j + c − b − 1 ⌋ ) let m = ⌊ c an + b ⌋
不难发现,∑ i = 0 n i ⋅ ( ⌊ c j + c − b − 1 a ⌋ < i ) \sum\limits_{i = 0}^{n} {i \cdot (\left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor < i)} i = 0 ∑ n i ⋅ ( ⌊ a c j + c − b − 1 ⌋ < i )
可看作一个首项为
⌊ c j + c − b − 1 a ⌋ + 1 \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor + 1 ⌊ a c j + c − b − 1 ⌋ + 1
,末项为 n n n
的等差数列求和,即等于
1 2 ⋅ ( ⌊ c j + c − b − 1 a ⌋ + 1 + n ) ⋅ ( n − ⌊ c j + c − b − 1 a ⌋ ) \frac{1}{2} \cdot(\left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor + 1 + n) \cdot (n - \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor) 2 1 ⋅ ( ⌊ a c j + c − b − 1 ⌋ + 1 + n ) ⋅ ( n − ⌊ a c j + c − b − 1 ⌋ )
。故有:
g ( a , b , c , n ) = ∑ j = 0 m − 1 1 2 ( ⌊ c j + c − b − 1 a ⌋ + n + 1 ) ⋅ ( n − ⌊ c j + c − b − 1 a ⌋ ) = 1 2 ∑ j = 0 m − 1 [ n ( n + 1 ) − ⌊ c j + c − b − 1 a ⌋ 2 − ⌊ c j + c − b − 1 a ⌋ ] = 1 2 [ ∑ j = 0 m − 1 n ( n + 1 ) − ∑ j = 0 m − 1 ⌊ c j + c − b − 1 a ⌋ 2 − ∑ j = 0 m − 1 ⌊ c j + c − b − 1 a ⌋ ] = 1 2 [ m n ( n + 1 ) − h ( c , c − b − 1 , a , m − 1 ) − f ( c , c − b − 1 , a , m − 1 ) ]
\begin{aligned}
g(a, b, c, n) & = \sum\limits_{j = 0}^{m - 1} {\frac{1}{2} (\left\lfloor
\frac{cj + c - b - 1}{a} \right\rfloor + n + 1) \cdot (n - \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor)} \\
& = \frac{1}{2} \sum\limits_{j = 0}^{m - 1} {\left[ n(n + 1) - {\left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor}^2 - \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor \right]} \\
& = \frac{1}{2} \left[ \sum\limits_{j = 0}^{m - 1} {n(n + 1)} - \sum\limits_{j = 0}^{m - 1} {\left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor}^2 - \sum\limits_{j = 0}^{m - 1} {\left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor} \right] \\
& = \frac{1}{2} \left[ mn(n + 1) - h(c, c - b - 1, a, m - 1) - f(c, c - b - 1, a, m - 1) \right]
\end{aligned}
g ( a , b , c , n ) = j = 0 ∑ m − 1 2 1 ( ⌊ a c j + c − b − 1 ⌋ + n + 1 ) ⋅ ( n − ⌊ a c j + c − b − 1 ⌋ ) = 2 1 j = 0 ∑ m − 1 [ n ( n + 1 ) − ⌊ a c j + c − b − 1 ⌋ 2 − ⌊ a c j + c − b − 1 ⌋ ] = 2 1 [ j = 0 ∑ m − 1 n ( n + 1 ) − j = 0 ∑ m − 1 ⌊ a c j + c − b − 1 ⌋ 2 − j = 0 ∑ m − 1 ⌊ a c j + c − b − 1 ⌋ ] = 2 1 [ mn ( n + 1 ) − h ( c , c − b − 1 , a , m − 1 ) − f ( c , c − b − 1 , a , m − 1 ) ]
看来 g g g
式最后推出来还会跟 h h h
式有关系……
结论
令 m = ⌊ a n + b c ⌋ m = \left\lfloor \frac{an + b}{c} \right\rfloor m = ⌊ c an + b ⌋
,有:
g ( a , b , c , n ) = { ⌊ a c ⌋ 1 6 n ( n + 1 ) ( 2 n + 1 ) + ⌊ b c ⌋ 1 2 n ( n + 1 ) + g ( a m o d c , b m o d c , c , n ) a ≥ c ∨ b ≥ c 1 2 [ m n ( n + 1 ) − h ( c , c − b − 1 , a , m − 1 ) − f ( c , c − b − 1 , a , m − 1 ) ] otherwise
g(a, b, c, n) =
\begin{cases}
\left\lfloor \frac{a}{c} \right\rfloor \frac{1}{6}n(n + 1)(2n + 1) + \left\lfloor \frac{b}{c} \right\rfloor \frac{1}{2}n(n + 1) & \\
+ g(a \bmod c, b \bmod c, c, n) & a \ge c \lor b \ge c \\
\frac{1}{2} \left[ mn(n + 1) - h(c, c - b - 1, a, m - 1) - f(c, c - b - 1, a, m - 1) \right] & \text{otherwise}
\end{cases}
g ( a , b , c , n ) = ⎩ ⎨ ⎧ ⌊ c a ⌋ 6 1 n ( n + 1 ) ( 2 n + 1 ) + ⌊ c b ⌋ 2 1 n ( n + 1 ) + g ( a mod c , b mod c , c , n ) 2 1 [ mn ( n + 1 ) − h ( c , c − b − 1 , a , m − 1 ) − f ( c , c − b − 1 , a , m − 1 ) ] a ≥ c ∨ b ≥ c otherwise
h 式
形式
h ( a , b , c , n ) = ∑ i = 0 n ⌊ a i + b c ⌋ 2
h(a, b, c, n) = \sum\limits_{i = 0}^{n} {\left\lfloor \frac{ai + b}{c} \right\rfloor}^2
h ( a , b , c , n ) = i = 0 ∑ n ⌊ c ai + b ⌋ 2
推导
若 a ≥ c a \ge c a ≥ c
或 b ≥ c b \ge c b ≥ c
,有:
h ( a , b , c , n ) = ∑ i = 0 n ⌊ a i + b c ⌋ 2 = ∑ i = 0 n ( ⌊ a c ⌋ i + ⌊ b c ⌋ + ⌊ ( a m o d c ) i + ( b m o d c ) c ⌋ ) 2 = ∑ i = 0 n ( ⌊ a c ⌋ i + ⌊ b c ⌋ ) 2 + 2 ∑ i = 0 n ( ⌊ a c ⌋ i + ⌊ b c ⌋ ) ⋅ ⌊ ( a m o d c ) i + ( b m o d c ) c ⌋ + ∑ i = 0 n ⌊ ( a m o d c ) i + ( b m o d c ) c ⌋ 2
\begin{aligned}
h(a, b, c, n) & = \sum\limits_{i = 0}^{n} {\left\lfloor \frac{ai + b}{c} \right\rfloor}^2 \\
& = \sum\limits_{i = 0}^{n} {(\left\lfloor \frac{a}{c} \right\rfloor i + \left\lfloor \frac{b}{c} \right\rfloor + \left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor)^2} \\
& = \sum\limits_{i = 0}^{n} {(\left\lfloor \frac{a}{c} \right\rfloor i + \left\lfloor \frac{b}{c} \right\rfloor)^2} + 2 \sum\limits_{i = 0}^{n} (\left\lfloor \frac{a}{c} \right\rfloor i + \left\lfloor \frac{b}{c} \right\rfloor) \cdot \left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor \\
& + \sum\limits_{i = 0}^{n} {\left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor}^2
\end{aligned}
h ( a , b , c , n ) = i = 0 ∑ n ⌊ c ai + b ⌋ 2 = i = 0 ∑ n ( ⌊ c a ⌋ i + ⌊ c b ⌋ + ⌊ c ( a mod c ) i + ( b mod c ) ⌋ ) 2 = i = 0 ∑ n ( ⌊ c a ⌋ i + ⌊ c b ⌋ ) 2 + 2 i = 0 ∑ n ( ⌊ c a ⌋ i + ⌊ c b ⌋ ) ⋅ ⌊ c ( a mod c ) i + ( b mod c ) ⌋ + i = 0 ∑ n ⌊ c ( a mod c ) i + ( b mod c ) ⌋ 2
为了方便展示,分开化简这三项:
∑ i = 0 n ( ⌊ a c ⌋ i + ⌊ b c ⌋ ) 2 = ⌊ a c ⌋ 2 ∑ i = 0 n i 2 + 2 ⌊ a c ⌋ ⌊ b c ⌋ ∑ i = 0 n i + ⌊ b c ⌋ 2 ∑ i = 0 n 1 = ⌊ a c ⌋ 2 1 6 n ( n + 1 ) ( 2 n + 1 ) + ⌊ a c ⌋ ⌊ b c ⌋ 2 n ( n + 1 ) + ⌊ b c ⌋ 2 ( n + 1 ) 2 ∑ i = 0 n ( ⌊ a c ⌋ i + ⌊ b c ⌋ ) ⌊ ( a m o d c ) i + ( b m o d c ) c ⌋ = 2 ⌊ a c ⌋ ∑ i = 0 n i ⌊ ( a m o d c ) i + ( b m o d c ) c ⌋ + 2 ⌊ b c ⌋ ∑ i = 0 n ⌊ ( a m o d c ) i + ( b m o d c ) c ⌋ = 2 ⌊ a c ⌋ g ( a m o d c , b m o d c , c , n ) + 2 ⌊ b c ⌋ f ( a m o d c , b m o d c , c , n ) ∑ i = 0 n ⌊ ( a m o d c ) i + ( b m o d c ) c ⌋ 2 = h ( a m o d c , b m o d c , c , n )
\begin{aligned}
\sum\limits_{i = 0}^{n} & {(\left\lfloor \frac{a}{c} \right\rfloor i + \left\lfloor \frac{b}{c} \right\rfloor)^2} \\
= & \left\lfloor \frac{a}{c} \right\rfloor^2 \sum\limits_{i = 0}^{n} {i^2} + 2\left\lfloor \frac{a}{c} \right\rfloor \left\lfloor \frac{b}{c} \right\rfloor \sum\limits_{i = 0}^{n} {i} + {\left\lfloor \frac{b}{c} \right\rfloor}^2 \sum\limits_{i = 0}^{n} {1} \\
= & \left\lfloor \frac{a}{c} \right\rfloor^2 \frac{1}{6}n(n + 1)(2n + 1) + \left\lfloor \frac{a}{c} \right\rfloor \left\lfloor \frac{b}{c} \right\rfloor 2n(n + 1) + \left\lfloor \frac{b}{c} \right\rfloor^2 (n + 1) \\
\\
2\sum\limits_{i = 0}^{n} & {(\left\lfloor \frac{a}{c} \right\rfloor i + \left\lfloor \frac{b}{c} \right\rfloor)} \left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor \\
= & 2\left\lfloor \frac{a}{c} \right\rfloor \sum\limits_{i = 0}^{n} {i\left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor} + 2\left\lfloor \frac{b}{c} \right\rfloor \sum\limits_{i = 0}^{n} {\left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor} \\
= & 2\left\lfloor \frac{a}{c} \right\rfloor g(a \bmod c, b \bmod c, c, n) + 2\left\lfloor \frac{b}{c} \right\rfloor f(a \bmod c, b \bmod c, c, n) \\
\\
\sum\limits_{i = 0}^{n} & {\left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor}^2 \\
= & h(a \bmod c, b \bmod c, c, n)
\end{aligned}
i = 0 ∑ n = = 2 i = 0 ∑ n = = i = 0 ∑ n = ( ⌊ c a ⌋ i + ⌊ c b ⌋ ) 2 ⌊ c a ⌋ 2 i = 0 ∑ n i 2 + 2 ⌊ c a ⌋ ⌊ c b ⌋ i = 0 ∑ n i + ⌊ c b ⌋ 2 i = 0 ∑ n 1 ⌊ c a ⌋ 2 6 1 n ( n + 1 ) ( 2 n + 1 ) + ⌊ c a ⌋ ⌊ c b ⌋ 2 n ( n + 1 ) + ⌊ c b ⌋ 2 ( n + 1 ) ( ⌊ c a ⌋ i + ⌊ c b ⌋ ) ⌊ c ( a mod c ) i + ( b mod c ) ⌋ 2 ⌊ c a ⌋ i = 0 ∑ n i ⌊ c ( a mod c ) i + ( b mod c ) ⌋ + 2 ⌊ c b ⌋ i = 0 ∑ n ⌊ c ( a mod c ) i + ( b mod c ) ⌋ 2 ⌊ c a ⌋ g ( a mod c , b mod c , c , n ) + 2 ⌊ c b ⌋ f ( a mod c , b mod c , c , n ) ⌊ c ( a mod c ) i + ( b mod c ) ⌋ 2 h ( a mod c , b mod c , c , n )
加起来并整理后有:
h ( a , b , c , n ) = ⌊ a c ⌋ 2 1 6 n ( n + 1 ) ( 2 n + 1 ) + ⌊ a c ⌋ ⌊ b c ⌋ 2 n ( n + 1 ) + ⌊ b c ⌋ 2 ( n + 1 ) + 2 ⌊ a c ⌋ g ( a m o d c , b m o d c , c , n ) + 2 ⌊ b c ⌋ f ( a m o d c , b m o d c , c , n ) + h ( a m o d c , b m o d c , c , n )
\begin{aligned}
h & (a, b, c, n) \\
& = \left\lfloor \frac{a}{c} \right\rfloor^2 \frac{1}{6}n(n + 1)(2n + 1) + \left\lfloor \frac{a}{c} \right\rfloor \left\lfloor \frac{b}{c} \right\rfloor 2n(n + 1) + \left\lfloor \frac{b}{c} \right\rfloor^2 (n + 1) \\
& + 2\left\lfloor \frac{a}{c} \right\rfloor g(a \bmod c, b \bmod c, c, n) + 2\left\lfloor \frac{b}{c} \right\rfloor f(a \bmod c, b \bmod c, c, n) \\
& + h(a \bmod c, b \bmod c, c, n)
\end{aligned}
h ( a , b , c , n ) = ⌊ c a ⌋ 2 6 1 n ( n + 1 ) ( 2 n + 1 ) + ⌊ c a ⌋ ⌊ c b ⌋ 2 n ( n + 1 ) + ⌊ c b ⌋ 2 ( n + 1 ) + 2 ⌊ c a ⌋ g ( a mod c , b mod c , c , n ) + 2 ⌊ c b ⌋ f ( a mod c , b mod c , c , n ) + h ( a mod c , b mod c , c , n )
若 a , b < c a, b < c a , b < c
,有:
h ( a , b , c , n ) = ∑ i = 0 n ⌊ a i + b c ⌋ 2 = ∑ i = 0 n ( 2 ∑ j = 0 ⌊ a i + b c ⌋ − 1 j + ⌊ a i + b c ⌋ ) = 2 ∑ j = 0 ⌊ a n + b c ⌋ − 1 ∑ i = 0 n j ⋅ ( j ≤ ⌊ a i + b c ⌋ − 1 ) + ∑ i = 0 n ⌊ a i + b c ⌋ = 2 ∑ j = 0 ⌊ a n + b c ⌋ − 1 ∑ i = 0 n j ⋅ ( j < ⌊ a i + b c ⌋ ) + f ( a , b , c , n ) let m = ⌊ a n + b c ⌋ = 2 ∑ j = 0 m − 1 ∑ i = 0 n j ⋅ ( j < ⌊ a i + b c ⌋ ) + f ( a , b , c , n ) = 2 ∑ j = 0 m − 1 j ⋅ ∑ i = 0 n [ c j < ( a i + b ) − c + 1 ] + f ( a , b , c , n ) = 2 ∑ j = 0 m − 1 j ⋅ ∑ i = 0 n ( ⌊ c j + c − b − 1 a ⌋ < i ) + f ( a , b , c , n ) = 2 ∑ j = 0 m − 1 j ⋅ ( n − ⌊ c j + c − b − 1 a ⌋ ) + f ( a , b , c , n ) = 2 n ∑ j = 0 m − 1 j − 2 ∑ j = 0 m − 1 j ⋅ ⌊ c j + c − b − 1 a ⌋ + f ( a , b , c , n ) = 2 n ⋅ 1 2 ( m − 1 ) m − 2 g ( c , c − b − 1 , a , m − 1 ) + f ( a , b , c , n )
\begin{aligned}
h(a, b, c, n) & = \sum\limits_{i = 0}^{n} {\left\lfloor \frac{ai + b}{c} \right\rfloor}^2 \\
& = \sum\limits_{i = 0}^{n} (2 \sum\limits_{j= 0}^{\left\lfloor \frac{ai + b}{c} \right\rfloor - 1} {j} + \left\lfloor \frac{ai + b}{c} \right\rfloor) \\
& = 2\sum\limits_{j = 0}^{\left\lfloor \frac{an + b}{c} \right\rfloor - 1} \sum\limits_{i = 0}^{n} {j \cdot (j \le \left\lfloor \frac{ai + b}{c} \right\rfloor - 1)} + \sum\limits_{i = 0}^{n} {\left\lfloor \frac{ai + b}{c} \right\rfloor} \\
& = 2\sum\limits_{j = 0}^{\left\lfloor \frac{an + b}{c} \right\rfloor - 1} \sum\limits_{i = 0}^{n} {j \cdot (j < \left\lfloor \frac{ai + b}{c} \right\rfloor)} + f(a, b, c, n) \\
& \text{let } m = \left\lfloor \frac{an + b}{c} \right\rfloor \\
& = 2\sum\limits_{j = 0}^{m - 1} \sum\limits_{i = 0}^{n} {j \cdot (j < \left\lfloor \frac{ai + b}{c} \right\rfloor)} + f(a, b, c, n) \\
& = 2\sum\limits_{j = 0}^{m - 1} j \cdot \sum\limits_{i = 0}^{n} {\left[ cj < (ai + b) - c + 1 \right]} + f(a, b, c, n) \\
& = 2\sum\limits_{j = 0}^{m - 1} j \cdot \sum\limits_{i = 0}^{n} {(\left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor < i)} + f(a, b, c, n) \\
& = 2\sum\limits_{j = 0}^{m - 1} j \cdot (n - \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor) + f(a, b, c, n) \\
& = 2n\sum\limits_{j = 0}^{m - 1} {j} - 2\sum\limits_{j = 0}^{m - 1} {j \cdot \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor} + f(a, b, c, n) \\
& = 2n \cdot \frac{1}{2}(m - 1)m - 2g(c, c - b - 1, a, m - 1) + f(a, b, c, n)
\end{aligned}
h ( a , b , c , n ) = i = 0 ∑ n ⌊ c ai + b ⌋ 2 = i = 0 ∑ n ( 2 j = 0 ∑ ⌊ c ai + b ⌋ − 1 j + ⌊ c ai + b ⌋ ) = 2 j = 0 ∑ ⌊ c an + b ⌋ − 1 i = 0 ∑ n j ⋅ ( j ≤ ⌊ c ai + b ⌋ − 1 ) + i = 0 ∑ n ⌊ c ai + b ⌋ = 2 j = 0 ∑ ⌊ c an + b ⌋ − 1 i = 0 ∑ n j ⋅ ( j < ⌊ c ai + b ⌋ ) + f ( a , b , c , n ) let m = ⌊ c an + b ⌋ = 2 j = 0 ∑ m − 1 i = 0 ∑ n j ⋅ ( j < ⌊ c ai + b ⌋ ) + f ( a , b , c , n ) = 2 j = 0 ∑ m − 1 j ⋅ i = 0 ∑ n [ c j < ( ai + b ) − c + 1 ] + f ( a , b , c , n ) = 2 j = 0 ∑ m − 1 j ⋅ i = 0 ∑ n ( ⌊ a c j + c − b − 1 ⌋ < i ) + f ( a , b , c , n ) = 2 j = 0 ∑ m − 1 j ⋅ ( n − ⌊ a c j + c − b − 1 ⌋ ) + f ( a , b , c , n ) = 2 n j = 0 ∑ m − 1 j − 2 j = 0 ∑ m − 1 j ⋅ ⌊ a c j + c − b − 1 ⌋ + f ( a , b , c , n ) = 2 n ⋅ 2 1 ( m − 1 ) m − 2 g ( c , c − b − 1 , a , m − 1 ) + f ( a , b , c , n )
带入之前推 f f f
式得到的结论可得:
h ( a , b , c , n ) = n ( m − 1 ) m − 2 g ( c , c − b − 1 , a , m − 1 ) + n m − f ( c , c − b − 1 , a , m − 1 ) = n m 2 − 2 g ( c , c − b − 1 , a , m − 1 ) − f ( c , c − b − 1 , a , m − 1 )
\begin{aligned}
h(a, b, c, n) & = n(m - 1)m - 2g(c, c - b - 1, a, m - 1) \\
& + nm - f(c, c - b - 1, a, m - 1) \\
& = nm^2 - 2g(c, c - b - 1, a, m - 1) - f(c, c - b - 1, a, m - 1)
\end{aligned}
h ( a , b , c , n ) = n ( m − 1 ) m − 2 g ( c , c − b − 1 , a , m − 1 ) + nm − f ( c , c − b − 1 , a , m − 1 ) = n m 2 − 2 g ( c , c − b − 1 , a , m − 1 ) − f ( c , c − b − 1 , a , m − 1 )
结论
令 m = ⌊ a n + b c ⌋ m = \left\lfloor \frac{an + b}{c} \right\rfloor m = ⌊ c an + b ⌋
,有:
h ( a , b , c , n ) = { ⌊ a c ⌋ 2 1 6 n ( n + 1 ) ( 2 n + 1 ) + ⌊ a c ⌋ ⌊ b c ⌋ 2 n ( n + 1 ) + ⌊ b c ⌋ 2 ( n + 1 ) + 2 ⌊ a c ⌋ g ( a m o d c , b m o d c , c , n ) + 2 ⌊ b c ⌋ f ( a m o d c , b m o d c , c , n ) + h ( a m o d c , b m o d c , c , n ) a ≥ c ∨ b ≥ c n m 2 − 2 g ( c , c − b − 1 , a , m − 1 ) − f ( c , c − b − 1 , a , m − 1 ) otherwise
h(a, b, c, n) =
\begin{cases}
\left\lfloor \frac{a}{c} \right\rfloor^2 \frac{1}{6}n(n + 1)(2n + 1) + \left\lfloor \frac{a}{c} \right\rfloor \left\lfloor \frac{b}{c} \right\rfloor 2n(n + 1) + \left\lfloor \frac{b}{c} \right\rfloor^2(n + 1) & \\
\ + 2\left\lfloor \frac{a}{c} \right\rfloor g(a \bmod c, b \bmod c, c, n) + 2\left\lfloor \frac{b}{c} \right\rfloor f(a \bmod c, b \bmod c, c, n) & \\
\ + h(a \bmod c, b \bmod c, c, n) & a \ge c \lor b \ge c \\
nm^2 - 2g(c, c - b - 1, a, m - 1) - f(c, c - b - 1, a, m - 1) & \text{otherwise}
\end{cases}
h ( a , b , c , n ) = ⎩ ⎨ ⎧ ⌊ c a ⌋ 2 6 1 n ( n + 1 ) ( 2 n + 1 ) + ⌊ c a ⌋ ⌊ c b ⌋ 2 n ( n + 1 ) + ⌊ c b ⌋ 2 ( n + 1 ) + 2 ⌊ c a ⌋ g ( a mod c , b mod c , c , n ) + 2 ⌊ c b ⌋ f ( a mod c , b mod c , c , n ) + h ( a mod c , b mod c , c , n ) n m 2 − 2 g ( c , c − b − 1 , a , m − 1 ) − f ( c , c − b − 1 , a , m − 1 ) a ≥ c ∨ b ≥ c otherwise
代码实现
仅 f 式
long long int quasiEuclidean( long long int a, long long int b,
long long int c, long long int n) {
if ( a == 0 ) {
return ( n + 1 ) * ( b / c);
}
if ( a >= c || b >= c) {
long long int tmp = ( n & 1 ) ? (( n + 1 ) >> 1 ) * n : ( n >> 1 ) * ( n + 1 );
return ( a / c) * tmp + ( b / c) * ( n + 1 ) + quasiEuclidean( a % c, b % c, c, n);
}
long long int m = ( a * n + b) / c;
return n * m - quasiEuclidean( c, c - b - 1 , a, m - 1 );
}
f, g, h 式
由于没有找到相应的模板题,所以…… 咕咕咕……
更通用的情况
在讨论完 f , g , h f, g, h f , g , h
式的推导后,我们来看一种更加通用的情况:
∑ i = 0 n i k 1 ⌊ a i + b c ⌋ k 2
\sum\limits_{i = 0}^{n} {i^{k_1} \left\lfloor \frac{ai + b}{c} \right\rfloor ^{k_2}}
i = 0 ∑ n i k 1 ⌊ c ai + b ⌋ k 2
题目链接:类欧几里得算法 - 题目 - LibreOJ
咕咕咕……
%%%