刚刚偷师学来了一波类欧,现在手推一下。
有几何推法——哦对不起空间想象能力超差的,这里直接用公式推导:
定义一堆东东
- f(a,b,c,n)=∑ni=0⌊ai+bc⌋ f ( a , b , c , n ) = ∑ i = 0 n ⌊ a i + b c ⌋
- g(a,b,c,n)=∑ni=0i⌊ai+bc⌋ g ( a , b , c , n ) = ∑ i = 0 n i ⌊ a i + b c ⌋
- h(a,b,c,n)=∑ni=0⌊ai+bc⌋2 h ( a , b , c , n ) = ∑ i = 0 n ⌊ a i + b c ⌋ 2
推导
对于a,b,c,n设 m=⌊an+bc⌋ ,a′=amodc ,b′=bmodc m = ⌊ a n + b c ⌋ , a ′ = a mod c , b ′ = b mod c
推f
f(a,b,c,n)=∑i=0n⌊ai+bc⌋=∑i=0n⌊a′i+b′c⌋+i⌊ac⌋+⌊bc⌋=f(a′,b′,c,n)+12(n+1)n⌊ac⌋+(n+1)⌊bc⌋(1)(2)(3) (1) f ( a , b , c , n ) = ∑ i = 0 n ⌊ a i + b c ⌋ (2) = ∑ i = 0 n ⌊ a ′ i + b ′ c ⌋ + i ⌊ a c ⌋ + ⌊ b c ⌋ (3) = f ( a ′ , b ′ , c , n ) + 1 2 ( n + 1 ) n ⌊ a c ⌋ + ( n + 1 ) ⌊ b c ⌋
对于 a<c,b<c a < c , b < c
f(a,b,c,n)=∑i=0n∑j=1m[j≤⌊ai+bc⌋]=∑j=0m−1∑i=0n[⌊ai+bc⌋≥j+1]=∑j=0m−1∑i=0n[ai≥jc+c−b]=∑j=0m−1∑i=0n[ai>jc+c−b−1]=∑j=0m−1n−⌊jc+c−b−1a⌋=mn−f(c,c−b−1,a,m−1)(4)(5)(6)(7)(8)(9) (4) f ( a , b , c , n ) = ∑ i = 0 n ∑ j = 1 m [ j ≤ ⌊ a i + b c ⌋ ] (5) = ∑ j = 0 m − 1 ∑ i = 0 n [ ⌊ a i + b c ⌋ ≥ j + 1 ] (6) = ∑ j = 0 m − 1 ∑ i = 0 n [ a i ≥ j c + c − b ] (7) = ∑ j = 0 m − 1 ∑ i = 0 n [ a i > j c + c − b − 1 ] (8) = ∑ j = 0 m − 1 n − ⌊ j c + c − b − 1 a ⌋ (9) = m n − f ( c , c − b − 1 , a , m − 1 )
推g和h是类似的:
推g
g(a,b,c,n)=∑i=0ni⌊ai+bc⌋=∑i=0ni⌊a′i+b′c⌋+i2⌊ac⌋+i⌊bc⌋=g(a′,b′,c,n)+16n(n+1)(2n+1)⌊ac⌋+12(n+1)n⌊bc⌋(29)(30)(31) (29) g ( a , b , c , n ) = ∑ i = 0 n i ⌊ a i + b c ⌋ (30) = ∑ i = 0 n i ⌊ a ′ i + b ′ c ⌋ + i 2 ⌊ a c ⌋ + i ⌊ b c ⌋ (31) = g ( a ′ , b ′ , c , n ) + 1 6 n ( n + 1 ) ( 2 n + 1 ) ⌊ a c ⌋ + 1 2 ( n + 1 ) n ⌊ b c ⌋
当 a<c,b<c a < c , b < c 时
g(a,b,c,n)=∑i=0ni⌊ai+bc⌋=∑i=0ni∑j=1m[j≤⌊ai+bc⌋]=∑j=0m−1∑i=0ni[i>⌊jc+c−b−1a⌋]=∑j=0m−112n(n+1)−12⌊jc+c−b−1a⌋(⌊jc+c−b−1a⌋+1)(利用等差数列)=12(mn(n+1)−h(c,c−b−1,a,m−1)−f(c,c−b−1,a,m−1))(32)(33)(34)(35)(36)(37) (32) g ( a , b , c , n ) = ∑ i = 0 n i ⌊ a i + b c ⌋ (33) = ∑ i = 0 n i ∑ j = 1 m [ j ≤ ⌊ a i + b c ⌋ ] (34) = ∑ j = 0 m − 1 ∑ i = 0 n i [ i > ⌊ j c + c − b − 1 a ⌋ ] (35) = ∑ j = 0 m − 1 1 2 n ( n + 1 ) − 1 2 ⌊ j c + c − b − 1 a ⌋ ( ⌊ j c + c − b − 1 a ⌋ + 1 ) (36) ( 利 用 等 差 数 列 ) (37) = 1 2 ( m n ( n + 1 ) − h ( c , c − b − 1 , a , m − 1 ) − f ( c , c − b − 1 , a , m − 1 ) )
推h
h(a,b,c,n)=∑i=0n⌊ai+bc⌋2=∑i=0n(⌊a′i+b′c⌋+i⌊ac⌋+⌊bc⌋)2=∑i=0n⌊a′i+b′c⌋2+i2⌊ac⌋2+⌊bc⌋2+2i⌊a′i+b′c⌋⌊ac⌋+2⌊a′i+b′c⌋⌊bc⌋+2i⌊ac⌋⌊bc⌋=h(a′,b′,c,n)+16n(n+1)(2n+1)⌊ac⌋2+(n+1)⌊bc⌋2+2⌊ac⌋g(a′,b′,c,n)+2⌊bc⌋f(a′,b′,c,n)+n(n+1)⌊ac⌋⌊bc⌋(19)(20)(21)(22)(23) (19) h ( a , b , c , n ) = ∑ i = 0 n ⌊ a i + b c ⌋ 2 (20) = ∑ i = 0 n ( ⌊ a ′ i + b ′ c ⌋ + i ⌊ a c ⌋ + ⌊ b c ⌋ ) 2 (21) = ∑ i = 0 n ⌊ a ′ i + b ′ c ⌋ 2 + i 2 ⌊ a c ⌋ 2 + ⌊ b c ⌋ 2 + 2 i ⌊ a ′ i + b ′ c ⌋ ⌊ a c ⌋ + 2 ⌊ a ′ i + b ′ c ⌋ ⌊ b c ⌋ + 2 i ⌊ a c ⌋ ⌊ b c ⌋ (22) = h ( a ′ , b ′ , c , n ) + 1 6 n ( n + 1 ) ( 2 n + 1 ) ⌊ a c ⌋ 2 + ( n + 1 ) ⌊ b c ⌋ 2 + 2 ⌊ a c ⌋ g ( a ′ , b ′ , c , n ) (23) + 2 ⌊ b c ⌋ f ( a ′ , b ′ , c , n ) + n ( n + 1 ) ⌊ a c ⌋ ⌊ b c ⌋
当 a<c,b<c a < c , b < c 时
首先介绍个很有用的东西:
a2=(a+1)a−a=2(∑i=1ai)−a a 2 = ( a + 1 ) a − a = 2 ( ∑ i = 1 a i ) − a
那么
h(a,b,c,n)=∑i=0n⌊ai+bc⌋2=∑i=0n2(∑j=1⌊ai+bc⌋j)−⌊ai+bc⌋=2(∑j=0m−1(j+1)∑i=0n[⌊ai+bc⌋>=j+1])−f(a,b,c,n)=2(∑j=0m−1j∑i=0n[i<⌊jc+c−b−1a⌋])+2(∑j=0m−1∑i=0n[i<⌊jc+c−b−1a⌋])−f(a,b,c,n)=2g(c,c−b−1,a,m−1)+2f(c,c−b−1,a,m−1)−f(a,b,c,n)(24)(25)(26)(27)(28) (24) h ( a , b , c , n ) = ∑ i = 0 n ⌊ a i + b c ⌋ 2 (25) = ∑ i = 0 n 2 ( ∑ j = 1 ⌊ a i + b c ⌋ j ) − ⌊ a i + b c ⌋ (26) = 2 ( ∑ j = 0 m − 1 ( j + 1 ) ∑ i = 0 n [ ⌊ a i + b c ⌋ >= j + 1 ] ) − f ( a , b , c , n ) (27) = 2 ( ∑ j = 0 m − 1 j ∑ i = 0 n [ i < ⌊ j c + c − b − 1 a ⌋ ] ) + 2 ( ∑ j = 0 m − 1 ∑ i = 0 n [ i < ⌊ j c + c − b − 1 a ⌋ ] ) − f ( a , b , c , n ) (28) = 2 g ( c , c − b − 1 , a , m − 1 ) + 2 f ( c , c − b − 1 , a , m − 1 ) − f ( a , b , c , n )
递归求出a,b,c,n的f,g,h即可
时间复杂度
观察式子,发现a先模c,然后与c交换,在模,与gcd操作基本相同,时间复杂度也相同,为 O(loga) O ( log a )