几个常用等式
- a ≤ ⌊ b c ⌋ ⇔ a c ≤ b a\le\left\lfloor\frac bc\right\rfloor\Leftrightarrow ac\le b a≤⌊cb⌋⇔ac≤b
- a < ⌈ b c ⌉ ⇔ a c < b a<\left\lceil\frac bc\right\rceil\Leftrightarrow ac<b a<⌈cb⌉⇔ac<b
- a ≥ ⌈ b c ⌉ ⇔ a c ≥ b a\ge\left\lceil\frac bc\right\rceil\Leftrightarrow ac\ge b a≥⌈cb⌉⇔ac≥b
- a > ⌊ b c ⌋ ⇔ a c > b a>\left\lfloor\frac bc\right\rfloor\Leftrightarrow ac>b a>⌊cb⌋⇔ac>b
- ⌊ b c ⌋ ⇔ ⌊ b + c − 1 c ⌋ \left\lfloor\frac bc\right\rfloor\Leftrightarrow \left\lfloor\frac {b+c-1}c\right\rfloor ⌊cb⌋⇔⌊cb+c−1⌋
- ⌊ b c ⌋ ⇔ ⌈ b − c + 1 c ⌉ \left\lfloor\frac bc\right\rfloor\Leftrightarrow \left\lceil\frac {b-c+1}c\right\rceil ⌊cb⌋⇔⌈cb−c+1⌉
类欧几里得
介绍
可以用来快速求出以下几个式子的值:
- f ( a , b , c , n ) = ∑ i = 0 n ⌊ a i + b c ⌋ f(a,b,c,n)=\sum_{i=0}^n\left\lfloor\frac{ai+b}c\right\rfloor f(a,b,c,n)=∑i=0n⌊cai+b⌋
- g ( a , b , c , n ) = ∑ i = 0 n i ⌊ a i + b c ⌋ g(a,b,c,n)=\sum_{i=0}^ni\left\lfloor\frac{ai+b}c\right\rfloor g(a,b,c,n)=∑i=0ni⌊cai+b⌋
- h ( a , b , c , n ) = ∑ i = 0 n ⌊ a i + b c ⌋ 2 h(a,b,c,n)=\sum_{i=0}^n\left\lfloor\frac{ai+b}c\right\rfloor^2 h(a,b,c,n)=∑i=0n⌊cai+b⌋2
由于求值的过程跟求 g c d gcd gcd的欧几里得算法类似因此叫做类欧几里得。
求f
- a ≥ c a\ge c a≥c o r or or b ≥ c b\ge c b≥c
把 ⌊ a i + b c ⌋ \left\lfloor\frac{ai+b}c\right\rfloor ⌊cai+b⌋拆开变成 ⌊ ( a % c ) i + b % c c ⌋ + ⌊