类欧几里得可以在
O
(
l
o
g
n
)
O(logn)
O(logn)的复杂度下求解类似以下的式子;
f
(
n
,
a
,
b
,
c
)
=
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
f(n,a,b,c)=\sum_{i=0}^{n}\left\lfloor\frac{ai+b}{c}\right\rfloor
f(n,a,b,c)=i=0∑n⌊cai+b⌋
g
(
n
,
a
,
b
,
c
)
=
∑
i
=
0
n
i
⌊
a
i
+
b
c
⌋
g(n,a,b,c)=\sum_{i=0}^{n}i\left\lfloor\frac{ai+b}{c}\right\rfloor
g(n,a,b,c)=i=0∑ni⌊cai+b⌋
h
(
n
,
a
,
b
,
c
)
=
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
2
h(n,a,b,c)=\sum_{i=0}^{n}\left\lfloor\frac{ai+b}{c}\right\rfloor^2
h(n,a,b,c)=i=0∑n⌊cai+b⌋2
f ( n , a , b , c ) f(n,a,b,c) f(n,a,b,c)函数的计算:
- 当 a = 0 a=0 a=0时,原式 = ( n + 1 ) ⌊ b c ⌋ =(n+1)\lfloor\frac{b}{c}\rfloor =(n+1)⌊cb⌋
- 当
a
≥
c
∣
∣
b
≥
c
a≥c||b≥c
a≥c∣∣b≥c时,
原 式 = ∑ i = 0 n ⌊ ( ⌊ a c ⌋ c + a % c ) i + ( ⌊ b c ⌋ c + b % c ) c ⌋ = ∑ i = 0 n ⌊ a c ⌋ i + ⌊ b c ⌋ + ⌊ ( a % c ) i + b % c c ⌋ = ⌊ a c ⌋ n ( n + 1 ) 2 + ( n + 1 ) ⌊ b c ⌋ + ∑ i = 0 n ⌊ ( a % c ) i + b % c c ⌋ = ⌊ a c ⌋ n ( n + 1 ) 2 + ( n + 1 ) ⌊ b c ⌋ + f ( n , a % c , b % c , c ) \begin{aligned} 原式 & =\sum_{i=0}^{n}\left\lfloor\frac{(\lfloor\frac{a}{c}\rfloor c+a \% c)i+ (\lfloor\frac{b}{c}\rfloor c+b\% c)}{c}\right\rfloor\\ & = \sum_{i=0}^{n}\lfloor \frac{a}{c} \rfloor i+\lfloor \frac{b}{c} \rfloor+\lfloor\frac{(a\%c)i+b\%c}{c}\rfloor \\ & =\lfloor \frac{a}{c} \rfloor\frac{n(n+1)}{2}+(n+1)\lfloor \frac{b}{c} \rfloor+\sum_{i=0}^{n}\left\lfloor\frac{(a\%c)i+b\%c}{c} \right \rfloor \\ & =\lfloor \frac{a}{c} \rfloor\frac{n(n+1)}{2}+(n+1)\lfloor \frac{b}{c} \rfloor+f(n,a\%c,b\%c,c) \\ \end{aligned} 原式=i=0∑n⌊c(⌊ca⌋c+a%c)i+(⌊cb⌋c+b%c)⌋=i=0∑n⌊ca⌋i+⌊cb⌋+⌊c(a%c)i+b%c⌋=⌊ca⌋2n(n+1)+(n+1)⌊cb⌋+i=0∑n⌊c(a%c)i+b%c⌋=⌊ca⌋2n(n+1)+(n+1)⌊cb⌋+f(n,a%c,b%c,c) - 当
a
<
c
&
&
b
<
c
a<c \&\& b<c
a<c&&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 ⌋ ] \begin{aligned} 原式 & =\sum_{i=0}^{n}\sum_{j=0}^{\lfloor\frac{ai+b}{c}\rfloor-1}1\\ &=\sum_{j=0}^{\lfloor\frac{an+b}{c}\rfloor-1}\sum_{i=0}^{n}\left[j<\left\lfloor\frac{ai+b}{c}\right\rfloor\right]\\ \end{aligned} 原式=i=0∑nj=0∑⌊cai+b⌋−11=j=0∑⌊can+b⌋−1i=0∑n[j<⌊cai+b⌋]
然后对于 j < ⌊ a i + b c ⌋ j<\lfloor\frac{ai+b}{c}\rfloor j<⌊cai+b⌋进行一些变换
j < ⌊ a i + b c ⌋ ⇔ j + 1 ≤ ⌊ a i + b c ⌋ ⇔ j + 1 ≤ a i + b c ⇔ j c + c ≤ a i + b ⇔ j c + c − b − 1 < a i ⇔ j c + c − b − 1 a < i ⇔ ⌊ j c + c − b − 1 a ⌋ < i \begin{aligned} j<\lfloor\frac{ai+b}{c}\rfloor &\Leftrightarrow j+1≤\lfloor\frac{ai+b}{c}\rfloor\Leftrightarrow j+1≤\frac{ai+b}{c}\\ &\Leftrightarrow jc+c≤ai+b \Leftrightarrow jc+c-b-1<ai\\ &\Leftrightarrow\frac{jc+c-b-1}{a}<i\\ &\Leftrightarrow\left\lfloor\frac{jc+c-b-1}{a}\right\rfloor<i\\ \end{aligned} j<⌊cai+b⌋⇔j+1≤⌊cai+b⌋⇔j+1≤cai+b⇔jc+c≤ai+b⇔jc+c−b−1<ai⇔ajc+c−b−1<i⇔⌊ajc+c−b−1⌋<i
此时令 m = ⌊ a n + b c ⌋ , t = ⌊ j c + c − b − 1 a ⌋ m=\lfloor\frac{an+b}{c}\rfloor,t=\lfloor\frac{jc+c-b-1}{a}\rfloor m=⌊can+b⌋,t=⌊ajc+c−b−1⌋
所以可以得到
原 式 = ∑ j = 0 ⌊ a n + b c ⌋ − 1 ∑ i = 0 n [ j < ⌊ a i + b c ⌋ ] = ∑ j = 0 m − 1 ∑ i = 0 n [ i > t ] = ∑ j = 0 m − 1 n − t = n m − ∑ j = 0 m − 1 t = n m − ∑ j = 0 m − 1 ⌊ j c + c − b − 1 a ⌋ = n m − f ( m − 1 , c , c − b − 1 , a ) \begin{aligned} 原式 &=\sum_{j=0}^{\lfloor\frac{an+b}{c}\rfloor-1}\sum_{i=0}^{n}\left[j<\left\lfloor\frac{ai+b}{c}\right\rfloor\right]\\ &=\sum_{j=0}^{m-1}\sum_{i=0}^{n}[i>t]\\ &=\sum_{j=0}^{m-1}n-t=nm-\sum_{j=0}^{m-1}t\\ &=nm-\sum_{j=0}^{m-1}\left\lfloor\frac{jc+c-b-1}{a}\right\rfloor\\ &=nm-f(m-1,c,c-b-1,a)\\ \end{aligned} 原式=j=0∑⌊can+b⌋−1i=0∑n[j<⌊cai+b⌋]=j=0∑m−1i=0∑n[i>t]=j=0∑m−1n−t=nm−j=0∑m−1t=nm−j=0∑m−1⌊ajc+c−b−1⌋=nm−f(m−1,c,c−b−1,a)
总结
f
(
n
,
a
,
b
,
c
)
f(n,a,b,c)
f(n,a,b,c)的函数值,令
m
=
⌊
a
n
+
b
c
⌋
m=\lfloor\frac{an+b}{c}\rfloor
m=⌊can+b⌋
当
a
=
0
a=0
a=0时,
f
(
n
,
a
,
b
,
c
)
=
(
n
+
1
)
⌊
b
c
⌋
f(n,a,b,c)=(n+1)\lfloor\frac{b}{c}\rfloor
f(n,a,b,c)=(n+1)⌊cb⌋
当
a
≥
c
∣
∣
b
≥
c
a≥c||b≥c
a≥c∣∣b≥c时,
f
(
n
,
a
,
b
,
c
)
=
⌊
a
c
⌋
n
(
n
+
1
)
2
+
(
n
+
1
)
⌊
b
c
⌋
+
f
(
n
,
a
%
c
,
b
%
c
,
c
)
f(n,a,b,c)=\lfloor \frac{a}{c} \rfloor\frac{n(n+1)}{2}+(n+1)\lfloor \frac{b}{c} \rfloor+f(n,a\%c,b\%c,c)
f(n,a,b,c)=⌊ca⌋2n(n+1)+(n+1)⌊cb⌋+f(n,a%c,b%c,c)
当
a
<
c
&
&
b
<
c
a<c \&\& b<c
a<c&&b<c,
f
(
n
,
a
,
b
,
c
)
=
n
m
−
f
(
m
−
1
,
c
,
c
−
b
−
1
,
a
)
f(n,a,b,c)=nm-f(m-1,c,c-b-1,a)
f(n,a,b,c)=nm−f(m−1,c,c−b−1,a)
\\
\\
\\
g
(
n
,
a
,
b
,
c
)
g(n,a,b,c)
g(n,a,b,c)函数的计算:
此处主要推导当
a
<
c
&
&
b
<
c
a<c \&\& b<c
a<c&&b<c的情况:
还是令
m
=
⌊
a
n
+
b
c
⌋
,
t
=
⌊
j
c
+
c
−
b
−
1
a
⌋
m=\lfloor\frac{an+b}{c}\rfloor,t=\lfloor\frac{jc+c-b-1}{a}\rfloor
m=⌊can+b⌋,t=⌊ajc+c−b−1⌋
原
式
=
∑
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
⌋
]
=
∑
j
=
0
m
−
1
∑
i
=
0
n
i
[
i
>
t
]
=
∑
j
=
0
m
−
1
(
n
−
m
)
(
m
+
1
+
n
)
2
=
1
2
[
n
m
(
n
+
1
)
−
h
(
m
−
1
,
c
,
c
−
b
−
1
,
a
)
−
f
(
m
−
1
,
c
,
c
−
b
−
1
,
a
)
]
\begin{aligned} 原式 &=\sum_{i=0}^{n}i\left\lfloor\frac{ai+b}{c}\right\rfloor=\sum_{i=0}^{n}\sum_{j=0}^{\lfloor\frac{ai+b}{c}\rfloor-1} i\\ &=\sum_{j=0}^{\lfloor\frac{an+b}{c}\rfloor-1} \sum_{i=0}^{n}i\left[j<\left\lfloor\frac{ai+b}{c}\right\rfloor\right]\\ &=\sum_{j=0}^{m-1}\sum_{i=0}^{n}i[i>t]\\ &=\sum_{j=0}^{m-1}\frac{(n-m)(m+1+n)}{2}\\ &=\frac{1}{2}[nm(n+1)-h(m-1,c,c-b-1,a)-f(m-1,c,c-b-1,a)]\\ \end{aligned}
原式=i=0∑ni⌊cai+b⌋=i=0∑nj=0∑⌊cai+b⌋−1i=j=0∑⌊can+b⌋−1i=0∑ni[j<⌊cai+b⌋]=j=0∑m−1i=0∑ni[i>t]=j=0∑m−12(n−m)(m+1+n)=21[nm(n+1)−h(m−1,c,c−b−1,a)−f(m−1,c,c−b−1,a)]
总结
g
(
n
,
a
,
b
,
c
)
g(n,a,b,c)
g(n,a,b,c)的函数值,令
m
=
⌊
a
n
+
b
c
⌋
m=\lfloor\frac{an+b}{c}\rfloor
m=⌊can+b⌋
当
a
=
0
a=0
a=0时,
g
(
n
,
a
,
b
,
c
)
=
n
(
n
+
1
)
2
⌊
b
c
⌋
g(n,a,b,c)=\frac{n(n+1)}{2}\lfloor\frac{b}{c}\rfloor
g(n,a,b,c)=2n(n+1)⌊cb⌋
当
a
≥
c
∣
∣
b
≥
c
a≥c||b≥c
a≥c∣∣b≥c时,
g
(
n
,
a
,
b
,
c
)
=
⌊
a
c
⌋
n
(
n
+
1
)
(
2
n
+
1
)
6
+
⌊
b
c
⌋
n
(
n
+
1
)
2
+
g
(
n
,
a
%
c
,
b
%
c
,
c
)
g(n,a,b,c)=\lfloor \frac{a}{c} \rfloor\frac{n(n+1)(2n+1)}{6}+\lfloor \frac{b}{c} \rfloor\frac{n(n+1)}{2}+g(n,a\%c,b\%c,c)
g(n,a,b,c)=⌊ca⌋6n(n+1)(2n+1)+⌊cb⌋2n(n+1)+g(n,a%c,b%c,c)
当
a
<
c
&
&
b
<
c
a<c \&\& b<c
a<c&&b<c,
g
(
n
,
a
,
b
,
c
)
=
1
2
[
n
m
(
n
+
1
)
−
h
(
m
−
1
,
c
,
c
−
b
−
1
,
a
)
−
f
(
m
−
1
,
c
,
c
−
b
−
1
,
a
)
]
g(n,a,b,c)=\frac{1}{2}[nm(n+1)-h(m-1,c,c-b-1,a)-f(m-1,c,c-b-1,a)]
g(n,a,b,c)=21[nm(n+1)−h(m−1,c,c−b−1,a)−f(m−1,c,c−b−1,a)]
\\
\\
\\
h
(
n
,
a
,
b
,
c
)
h(n,a,b,c)
h(n,a,b,c)函数的计算:
此处主要推导当
a
<
c
&
&
b
<
c
a<c \&\& b<c
a<c&&b<c的情况:
首先进行一步代换:
n
2
=
2
n
(
n
+
1
)
2
−
n
=
(
2
∑
i
=
0
n
i
)
−
n
n^2=2\frac{n(n+1)}{2}-n=\left( 2\sum_{i=0}^{n}i\right)-n
n2=22n(n+1)−n=(2i=0∑ni)−n
原
式
=
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
2
=
∑
i
=
0
n
[
(
2
∑
j
=
1
⌊
a
i
+
b
c
⌋
j
)
−
⌊
a
i
+
b
c
⌋
]
=
(
2
∑
i
=
0
n
∑
j
=
1
⌊
a
i
+
b
c
⌋
j
)
−
f
(
n
,
a
,
b
,
c
)
\begin{aligned} 原式 &=\sum_{i=0}^{n}\left\lfloor\frac{ai+b}{c}\right\rfloor^2\\ &=\sum_{i=0}^{n}\left[\left(2\sum_{j=1}^{\lfloor\frac{ai+b}{c}\rfloor}j\right)-\left\lfloor\frac{ai+b}{c}\right\rfloor\right]\\ &=\left(2\sum_{i=0}^{n}\sum_{j=1}^{\lfloor\frac{ai+b}{c}\rfloor}j\right)-f(n,a,b,c)\\ \end{aligned}
原式=i=0∑n⌊cai+b⌋2=i=0∑n⎣⎡⎝⎛2j=1∑⌊cai+b⌋j⎠⎞−⌊cai+b⌋⎦⎤=⎝⎛2i=0∑nj=1∑⌊cai+b⌋j⎠⎞−f(n,a,b,c)
对于左边一部分:
∑
i
=
0
n
∑
j
=
1
⌊
a
i
+
b
c
⌋
j
=
∑
i
=
0
n
∑
j
=
0
⌊
a
i
+
b
c
⌋
−
1
(
j
+
1
)
=
∑
j
=
0
m
−
1
(
j
+
1
)
∑
i
=
0
n
[
j
<
⌊
a
i
+
b
c
⌋
]
=
∑
j
=
0
m
−
1
(
j
+
1
)
∑
i
=
0
n
[
i
>
t
]
=
∑
j
=
0
m
−
1
(
j
+
1
)
(
n
−
t
)
=
1
2
n
m
(
n
+
1
)
−
g
(
m
−
1
,
c
,
c
−
b
−
1
,
a
)
−
f
(
m
−
1
,
c
,
c
−
b
−
1
,
a
)
\begin{aligned} \sum_{i=0}^{n}\sum_{j=1}^{\lfloor\frac{ai+b}{c}\rfloor}j &=\sum_{i=0}^{n}\sum_{j=0}^{\lfloor\frac{ai+b}{c}\rfloor-1}(j+1)\\ &=\sum_{j=0}^{m-1}(j+1)\sum_{i=0}^{n}\left[j<\left\lfloor\frac{ai+b}{c}\right\rfloor\right]\\ &=\sum_{j=0}^{m-1}(j+1)\sum_{i=0}^{n}[i>t]\\ &=\sum_{j=0}^{m-1}(j+1)(n-t)\\ &=\frac{1}{2}nm(n+1)-g(m-1,c,c-b-1,a)-f(m-1,c,c-b-1,a)\\ \end{aligned}
i=0∑nj=1∑⌊cai+b⌋j=i=0∑nj=0∑⌊cai+b⌋−1(j+1)=j=0∑m−1(j+1)i=0∑n[j<⌊cai+b⌋]=j=0∑m−1(j+1)i=0∑n[i>t]=j=0∑m−1(j+1)(n−t)=21nm(n+1)−g(m−1,c,c−b−1,a)−f(m−1,c,c−b−1,a)
综上 h ( n , a , b , c ) = n m ( n + 1 ) − 2 g ( m − 1 , c , c − b − 1 , a ) − 2 f ( m − 1 , c , c − b − 1 , a ) − f ( n , a , b , c ) h(n,a,b,c)=nm(n+1)-2g(m-1,c,c-b-1,a)-2f(m-1,c,c-b-1,a)-f(n,a,b,c) h(n,a,b,c)=nm(n+1)−2g(m−1,c,c−b−1,a)−2f(m−1,c,c−b−1,a)−f(n,a,b,c)
总结
h
(
n
,
a
,
b
,
c
)
h(n,a,b,c)
h(n,a,b,c)的函数值,令
m
=
⌊
a
n
+
b
c
⌋
m=\lfloor\frac{an+b}{c}\rfloor
m=⌊can+b⌋
当
a
=
0
a=0
a=0时,
h
(
n
,
a
,
b
,
c
)
=
(
n
+
1
)
⌊
b
c
⌋
2
h(n,a,b,c)=(n+1)\lfloor\frac{b}{c}\rfloor^2
h(n,a,b,c)=(n+1)⌊cb⌋2
当
a
≥
c
∣
∣
b
≥
c
a≥c||b≥c
a≥c∣∣b≥c时,
h
(
n
,
a
,
b
,
c
)
=
n
(
n
+
1
)
(
2
n
+
1
)
6
⌊
a
c
⌋
2
+
(
n
+
1
)
⌊
b
c
⌋
2
+
⌊
a
c
⌋
⌊
b
c
⌋
n
(
n
+
1
)
+
h
(
n
,
a
%
c
,
b
%
c
,
c
)
+
2
⌊
b
c
⌋
f
(
n
,
a
%
c
,
b
%
c
,
c
)
+
2
⌊
a
c
⌋
g
(
n
,
a
%
c
,
b
%
c
,
c
)
h(n,a,b,c)=\frac{n(n+1)(2n+1)}{6}\lfloor\frac{a}{c}\rfloor^2+(n+1)\lfloor\frac{b}{c}\rfloor^2+\lfloor\frac{a}{c}\rfloor \lfloor\frac{b}{c}\rfloor n(n+1)+h(n,a\%c,b\%c,c)+2\lfloor\frac{b}{c}\rfloor f(n,a\%c,b\%c,c)+2\lfloor\frac{a}{c}\rfloor g(n,a\%c,b\%c,c)
h(n,a,b,c)=6n(n+1)(2n+1)⌊ca⌋2+(n+1)⌊cb⌋2+⌊ca⌋⌊cb⌋n(n+1)+h(n,a%c,b%c,c)+2⌊cb⌋f(n,a%c,b%c,c)+2⌊ca⌋g(n,a%c,b%c,c)
当
a
<
c
&
&
b
<
c
a<c \&\& b<c
a<c&&b<c,
h
(
n
,
a
,
b
,
c
)
=
1
2
[
n
m
(
n
+
1
)
−
h
(
m
−
1
,
c
,
c
−
b
−
1
,
a
)
−
f
(
m
−
1
,
c
,
c
−
b
−
1
,
a
)
]
h(n,a,b,c)=\frac{1}{2}[nm(n+1)-h(m-1,c,c-b-1,a)-f(m-1,c,c-b-1,a)]
h(n,a,b,c)=21[nm(n+1)−h(m−1,c,c−b−1,a)−f(m−1,c,c−b−1,a)]
const LL p=998244353;
LL i2=499122177,i6=166374059;//2^(-1),6^(-1)
struct data
{
data(){f=g=h=0;}
LL f,g,h;
};
data calc(LL n,LL a,LL b,LL c)
{
LL ac=a/c,bc=b/c,m=(a*n+b)/c,n1=n+1,n21=n*2+1;
data d;
if(!a)
{
d.f=bc*n1%p;
d.g=bc*n%p*n1%p*i2%p;
d.h=bc*bc%p*n1%p;
return d;
}
if(a>=c||b>=c)
{
d.f=n*n1%p*i2%p*ac%p+n1*bc%p;
d.g=ac*n%p*n1%p*n21%p*i6%p+bc*n%p*n1%p*i2%p;
d.h=ac*ac%p*n%p*n1%p*n21%p*i6%p+bc*bc%p*n1%p+ac*bc%p*n%p*n1%p;
d.f%=p,d.g%=p,d.h%=p;
data e=calc(n,a%c,b%c,c);
d.h+=e.h+2*bc%p*e.f%p+2*ac%p*e.g%p;
d.g+=e.g,d.f+=e.f;
d.f%=p,d.g%=p,d.h%=p;
return d;
}
data e=calc(m-1,c,c-b-1,a);
d.f=n*m%p-e.f,d.f=(d.f%p+p)%p;
d.g=m*n%p*n1%p-e.h-e.f,d.g=(d.g*i2%p+p)%p;
d.h=n*m%p*(m+1)%p-2*e.g-2*e.f-d.f,d.h=(d.h%p+p)%p;
return d;
}