来源
类欧几里德算法由洪华敦大佬在 2016 年 NOI \text{NOI} NOI 冬令营营员交流中提出。截止 2020 年 4 月 29 日,百度百科和维基百科都尚未收录该词条 Orz \text{Orz} Orz。
前置知识
取整函数
⌊
a
b
⌋
\left\lfloor\frac{a}{b}\right\rfloor
⌊ba⌋ 为
a
b
\frac{a}{b}
ba 向下取整,
⌈
a
b
⌉
\left\lceil\frac{a}{b}\right\rceil
⌈ba⌉ 为
a
b
\frac{a}{b}
ba 向上取整。
基与下面的类欧几里得算法的推导过程,需要掌握一些取整函数的技巧。
⌊
a
b
⌋
⩾
c
⇔
a
⩾
b
c
⌈
a
b
⌉
⩽
c
⇔
a
⩽
b
c
⌊
a
b
⌋
<
c
⇔
a
<
b
c
⌈
a
b
⌉
>
c
⇔
a
>
b
c
\left\lfloor\frac{a}{b}\right\rfloor\geqslant c \Leftrightarrow a\geqslant bc\ \ \ \left\lceil\frac{a}{b}\right\rceil\leqslant c \Leftrightarrow a\leqslant bc\ \ \ \left\lfloor\frac{a}{b}\right\rfloor< c \Leftrightarrow a< bc\ \ \ \left\lceil\frac{a}{b}\right\rceil> c \Leftrightarrow a> bc
⌊ba⌋⩾c⇔a⩾bc ⌈ba⌉⩽c⇔a⩽bc ⌊ba⌋<c⇔a<bc ⌈ba⌉>c⇔a>bc
⌊
a
b
⌋
=
⌈
a
+
b
+
1
b
⌉
⌈
a
b
⌉
=
⌊
a
+
b
−
1
b
⌋
\left\lfloor\frac{a}{b}\right\rfloor=\left\lceil\frac{a+b+1}{b}\right\rceil\ \ \ \left\lceil\frac{a}{b}\right\rceil=\left\lfloor\frac{a+b-1}{b}\right\rfloor
⌊ba⌋=⌈ba+b+1⌉ ⌈ba⌉=⌊ba+b−1⌋
证明要略
当 a m o d b = 0 a\bmod b=0 amodb=0 时,上述式子显然都成立;当 a m o d b ≠ 0 a\bmod b\ne 0 amodb=0 时,可以令 a = k b + m a=kb+m a=kb+m ,其中 k , m ∈ N ∗ k,m\in N^* k,m∈N∗, 1 ⩽ m < b 1\leqslant m<b 1⩽m<b,可以轻易得到证明。
引入
类欧几里得算法主要用来计算形如
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor
i=0∑n⌊cai+b⌋,
∑
i
=
0
n
i
⌊
a
i
+
b
c
⌋
\sum\limits_{i=0}^n i\left\lfloor\frac{ai+b}{c}\right\rfloor
i=0∑ni⌊cai+b⌋,
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
2
\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor^2
i=0∑n⌊cai+b⌋2的表达式。
记
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⌊cai+b⌋,
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∑ni⌊cai+b⌋,
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⌊cai+b⌋2。
其结果由递归函数得到。
由于推导过程类似欧几里得算法,时间复杂度同欧几里得算法一样也是
log
n
\log n
logn ,故称类欧几里得算法。
推导
推导 f ( a , b , c , n ) f(a,b,c,n) f(a,b,c,n)
f
(
a
,
b
,
c
,
n
)
f(a,b,c,n)
f(a,b,c,n) 的形式最为简单,也最常出现;其几何意义为直角坐标系下,直线
y
=
a
x
+
b
c
y=\frac{ax+b}{c}
y=cax+b 与
x
,
y
x,y
x,y 两轴包围区域内的整点个数。
当
a
⩾
c
a\geqslant c
a⩾c 或
b
⩾
c
b\geqslant c
b⩾c时,意味着可以将
a
,
b
a,b
a,b 对
c
c
c 取模简化问题。
当
a
⩾
c
a\geqslant c
a⩾c 或
b
⩾
c
b\geqslant c
b⩾c时
f
(
a
,
b
,
c
,
n
)
=
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
=
∑
i
=
0
n
⌊
(
⌊
a
c
⌋
c
+
a
m
o
d
c
)
i
+
(
⌊
b
c
⌋
c
+
b
m
o
d
c
)
c
⌋
=
∑
i
=
0
n
[
⌊
a
c
⌋
i
+
⌊
b
c
⌋
+
⌊
(
a
m
o
d
c
)
i
+
(
b
m
o
d
c
)
c
⌋
]
=
∑
i
=
0
n
(
⌊
a
c
⌋
i
+
⌊
b
c
⌋
)
+
∑
i
=
0
n
⌊
(
a
m
o
d
c
)
i
+
(
b
m
o
d
c
)
c
⌋
=
n
(
n
+
1
)
2
⌊
a
c
⌋
+
(
n
+
1
)
⌊
b
c
⌋
+
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\lfloor\frac{\left(\left\lfloor\frac{a}{c}\right\rfloor c+a\bmod c\right)i+\left(\left\lfloor\frac{b}{c}\right\rfloor c+b\bmod c\right)}{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]\\&=\sum\limits_{i=0}^n\left(\left\lfloor\frac{a}{c}\right\rfloor i+\left\lfloor\frac{b}{c}\right\rfloor\right)+\sum\limits_{i=0}^n\left\lfloor\frac{(a\bmod c)i+(b\bmod c)}{c}\right\rfloor\\&=\frac{n(n+1)}{2}\left\lfloor\frac{a}{c}\right\rfloor+(n+1)\left\lfloor\frac{b}{c}\right\rfloor+f(a\bmod c,b\bmod c,c,n)\end{aligned}
f(a,b,c,n)=i=0∑n⌊cai+b⌋=i=0∑n⌊c(⌊ca⌋c+amodc)i+(⌊cb⌋c+bmodc)⌋=i=0∑n[⌊ca⌋i+⌊cb⌋+⌊c(amodc)i+(bmodc)⌋]=i=0∑n(⌊ca⌋i+⌊cb⌋)+i=0∑n⌊c(amodc)i+(bmodc)⌋=2n(n+1)⌊ca⌋+(n+1)⌊cb⌋+f(amodc,bmodc,c,n)
那么问题就转化为
a
<
c
a<c
a<c 且
b
<
c
b<c
b<c 的情况。我们观察式子,发现只有
i
i
i 这一个变量,因此就只能从
i
i
i 下手。在推求和式时有一个常见的技巧,就是条件与贡献的放缩与转化。具体地说,在原式
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⌊cai+b⌋ 中,
0
⩽
i
⩽
n
0\leqslant i\leqslant n
0⩽i⩽n 是条件,而
⌊
a
i
+
b
c
⌋
\left\lfloor\frac{ai+b}{c}\right\rfloor
⌊cai+b⌋ 是对总和的贡献。要加快一个求和式的计算,所有的方法都可以都可以归约为 贡献合并计算。如果发现式子的贡献难以合并,就可以将贡献与条件作转化得到另一个形式的求和式。
请阁下看好接下来的神仙操作!
Orz
\text{Orz}
Orz
f
(
a
,
b
,
c
,
n
)
=
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
=
∑
i
=
0
n
∑
j
=
1
⌊
a
i
+
b
c
⌋
1
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=1}^{\left\lfloor\frac{ai+b}{c}\right\rfloor}1
f(a,b,c,n)=i=0∑n⌊cai+b⌋=i=0∑nj=1∑⌊cai+b⌋1
当
a
<
c
a<c
a<c 且
b
<
c
b<c
b<c 时
f
(
a
,
b
,
c
,
n
)
=
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
=
∑
i
=
0
n
∑
j
=
1
⌊
a
i
+
b
c
⌋
1
=
∑
i
=
0
n
∑
j
=
1
⌊
a
n
+
b
c
⌋
[
⌊
a
i
+
b
c
⌋
⩾
j
]
=
∑
j
=
1
⌊
a
n
+
b
c
⌋
∑
i
=
0
n
[
⌊
a
i
+
b
c
⌋
⩾
j
]
=
∑
j
=
1
⌊
a
n
+
b
c
⌋
∑
i
=
0
n
[
a
i
+
b
⩾
c
j
]
=
∑
j
=
1
⌊
a
n
+
b
c
⌋
∑
i
=
0
n
[
i
⩾
⌈
c
j
−
b
a
⌉
]
=
∑
j
=
1
⌊
a
n
+
b
c
⌋
∑
i
=
⌈
c
j
−
b
a
⌉
n
1
=
∑
j
=
1
⌊
a
n
+
b
c
⌋
(
n
−
⌈
c
j
−
b
a
⌉
+
1
)
=
∑
j
=
1
⌊
a
n
+
b
c
⌋
(
n
−
⌊
c
j
+
a
−
b
−
1
a
⌋
+
1
)
=
n
⌊
a
n
+
b
c
⌋
−
∑
j
=
1
⌊
a
n
+
b
c
⌋
(
⌊
c
j
+
a
−
b
−
1
a
⌋
−
1
)
=
n
⌊
a
n
+
b
c
⌋
−
∑
j
=
1
⌊
a
n
+
b
c
⌋
⌊
c
j
−
b
−
1
a
⌋
=
n
⌊
a
n
+
b
c
⌋
−
∑
j
=
0
⌊
a
n
+
b
c
⌋
−
1
⌊
c
(
j
+
1
)
−
b
−
1
a
⌋
=
n
⌊
a
n
+
b
c
⌋
−
∑
j
=
0
⌊
a
n
+
b
c
⌋
−
1
⌊
c
j
+
c
−
b
−
1
a
⌋
=
n
⌊
a
n
+
b
c
⌋
−
f
(
c
,
c
−
b
−
1
,
a
,
⌊
a
n
+
b
c
⌋
−
1
)
\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=1}^{\left\lfloor\frac{ai+b}{c}\right\rfloor}1\\&=\sum\limits_{i=0}^n\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}\left[\left\lfloor\frac{ai+b}{c}\right\rfloor\geqslant j\right]\\&=\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}\sum\limits_{i=0}^n\left[\left\lfloor\frac{ai+b}{c}\right\rfloor\geqslant j\right]\\&=\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}\sum\limits_{i=0}^n\left[ai+b\geqslant cj\right]\\&=\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}\sum\limits_{i=0}^n\left[i\geqslant \left\lceil \frac{cj-b}{a}\right\rceil\right]\\&=\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}\sum\limits_{i=\left\lceil \frac{cj-b}{a}\right\rceil}^n1\\&=\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}\left(n-\left\lceil \frac{cj-b}{a}\right\rceil+1\right)\\&=\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}\left(n-\left\lfloor \frac{cj+a-b-1}{a}\right\rfloor+1\right)\\&=n\left\lfloor\frac{an+b}{c}\right\rfloor-\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}\left(\left\lfloor \frac{cj+a-b-1}{a}\right\rfloor-1\right)\\&=n\left\lfloor\frac{an+b}{c}\right\rfloor-\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}\left\lfloor \frac{cj-b-1}{a}\right\rfloor\\&=n\left\lfloor\frac{an+b}{c}\right\rfloor-\sum\limits_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}\left\lfloor \frac{c(j+1)-b-1}{a}\right\rfloor\\&=n\left\lfloor\frac{an+b}{c}\right\rfloor-\sum\limits_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}\left\lfloor \frac{cj+c-b-1}{a}\right\rfloor\\&=n\left\lfloor\frac{an+b}{c}\right\rfloor-f\left(c,c-b-1,a,\left\lfloor\frac{an+b}{c}\right\rfloor-1\right)\end{aligned}
f(a,b,c,n)=i=0∑n⌊cai+b⌋=i=0∑nj=1∑⌊cai+b⌋1=i=0∑nj=1∑⌊can+b⌋[⌊cai+b⌋⩾j]=j=1∑⌊can+b⌋i=0∑n[⌊cai+b⌋⩾j]=j=1∑⌊can+b⌋i=0∑n[ai+b⩾cj]=j=1∑⌊can+b⌋i=0∑n[i⩾⌈acj−b⌉]=j=1∑⌊can+b⌋i=⌈acj−b⌉∑n1=j=1∑⌊can+b⌋(n−⌈acj−b⌉+1)=j=1∑⌊can+b⌋(n−⌊acj+a−b−1⌋+1)=n⌊can+b⌋−j=1∑⌊can+b⌋(⌊acj+a−b−1⌋−1)=n⌊can+b⌋−j=1∑⌊can+b⌋⌊acj−b−1⌋=n⌊can+b⌋−j=0∑⌊can+b⌋−1⌊ac(j+1)−b−1⌋=n⌊can+b⌋−j=0∑⌊can+b⌋−1⌊acj+c−b−1⌋=n⌊can+b⌋−f(c,c−b−1,a,⌊can+b⌋−1)
边界条件为,当
a
=
0
a=0
a=0 时,
f
(
a
,
b
,
c
,
n
)
=
(
n
+
1
)
⌊
b
c
⌋
f(a,b,c,n)=(n+1)\left\lfloor\frac{b}{c}\right\rfloor
f(a,b,c,n)=(n+1)⌊cb⌋。
推导 g ( a , b , c , n ) g(a,b,c,n) g(a,b,c,n)
当
a
⩾
c
a\geqslant c
a⩾c 或
b
⩾
c
b\geqslant c
b⩾c 时
g
(
a
,
b
,
c
,
n
)
=
∑
i
=
0
n
i
⌊
a
i
+
b
c
⌋
=
∑
i
=
0
n
i
[
⌊
(
a
m
o
d
c
)
i
+
(
b
m
o
d
c
)
c
⌋
+
⌊
a
c
⌋
i
+
⌊
b
c
⌋
]
=
∑
i
=
0
n
i
⌊
(
a
m
o
d
c
)
i
+
(
b
m
o
d
c
)
c
⌋
+
∑
i
=
0
n
⌊
a
c
⌋
i
2
+
∑
i
=
0
n
⌊
b
c
⌋
i
=
n
(
n
+
1
)
(
2
n
+
1
)
6
⌊
a
c
⌋
+
n
(
n
+
1
)
2
⌊
b
c
⌋
+
∑
i
=
0
n
i
⌊
(
a
m
o
d
c
)
i
+
(
b
m
o
d
c
)
c
⌋
=
n
(
n
+
1
)
(
2
n
+
1
)
6
⌊
a
c
⌋
+
n
(
n
+
1
)
2
⌊
b
c
⌋
+
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}^ni\left[\left\lfloor\frac{(a\bmod c)i+(b\bmod c)}{c}\right\rfloor+\left\lfloor\frac{a}{c}\right\rfloor i+\left\lfloor\frac{b}{c}\right\rfloor\right]\\&=\sum\limits_{i=0}^n i\left\lfloor\frac{(a\bmod c)i+(b\bmod c)}{c}\right\rfloor+\sum\limits_{i=0}^n\left\lfloor\frac{a}{c}\right\rfloor i^2+\sum\limits_{i=0}^n\left\lfloor\frac{b}{c}\right\rfloor i\\&=\frac{n(n+1)(2n+1)}{6}\left\lfloor\frac{a}{c}\right\rfloor+\frac{n(n+1)}{2}\left\lfloor\frac{b}{c}\right\rfloor+\sum\limits_{i=0}^n i\left\lfloor\frac{(a\bmod c)i+(b\bmod c)}{c}\right\rfloor\\&=\frac{n(n+1)(2n+1)}{6}\left\lfloor\frac{a}{c}\right\rfloor+\frac{n(n+1)}{2}\left\lfloor\frac{b}{c}\right\rfloor+g(a\bmod c,b\bmod c,c,n)\end{aligned}
g(a,b,c,n)=i=0∑ni⌊cai+b⌋=i=0∑ni[⌊c(amodc)i+(bmodc)⌋+⌊ca⌋i+⌊cb⌋]=i=0∑ni⌊c(amodc)i+(bmodc)⌋+i=0∑n⌊ca⌋i2+i=0∑n⌊cb⌋i=6n(n+1)(2n+1)⌊ca⌋+2n(n+1)⌊cb⌋+i=0∑ni⌊c(amodc)i+(bmodc)⌋=6n(n+1)(2n+1)⌊ca⌋+2n(n+1)⌊cb⌋+g(amodc,bmodc,c,n)
当
a
<
c
a<c
a<c 且
b
<
c
b<c
b<c 时
g
(
a
,
b
,
c
,
n
)
=
∑
i
=
0
n
i
⌊
a
i
+
b
c
⌋
=
∑
i
=
0
n
∑
j
=
1
⌊
a
i
+
b
c
⌋
i
=
∑
i
=
0
n
∑
j
=
1
⌊
a
n
+
b
c
⌋
i
[
⌊
a
i
+
b
c
⌋
⩾
j
]
=
∑
i
=
0
n
∑
j
=
1
⌊
a
n
+
b
c
⌋
i
[
a
i
+
b
⩾
c
j
]
=
∑
i
=
0
n
∑
j
=
1
⌊
a
n
+
b
c
⌋
i
[
i
⩾
⌈
c
j
−
b
a
⌉
]
=
∑
i
=
0
n
∑
j
=
1
⌊
a
n
+
b
c
⌋
i
[
i
⩾
⌊
c
j
+
a
−
b
−
1
a
⌋
]
=
∑
j
=
1
⌊
a
n
+
b
c
⌋
∑
i
=
0
n
i
[
i
⩾
⌊
c
j
+
a
−
b
−
1
a
⌋
]
=
∑
j
=
1
⌊
a
n
+
b
c
⌋
∑
i
=
⌊
c
j
+
a
−
b
−
1
a
⌋
n
i
=
∑
j
=
1
⌊
a
n
+
b
c
⌋
(
n
+
⌊
c
j
+
a
−
b
−
1
a
⌋
)
(
n
−
⌊
c
j
+
a
−
b
−
1
a
⌋
+
1
)
2
=
∑
j
=
1
⌊
a
n
+
b
c
⌋
(
n
+
⌊
c
j
−
b
−
1
a
⌋
+
1
)
(
n
−
⌊
c
j
−
b
−
1
a
⌋
)
2
=
∑
j
=
0
⌊
a
n
+
b
c
⌋
−
1
(
n
+
⌊
c
(
j
+
1
)
−
b
−
1
a
⌋
+
1
)
(
n
−
⌊
c
(
j
+
1
)
−
b
−
1
a
⌋
)
2
=
∑
j
=
0
⌊
a
n
+
b
c
⌋
−
1
(
n
+
⌊
c
j
+
c
−
b
−
1
a
⌋
+
1
)
(
n
−
⌊
c
j
+
c
−
b
−
1
a
⌋
)
2
=
1
2
∑
j
=
0
⌊
a
n
+
b
c
⌋
−
1
[
n
(
n
+
1
)
−
⌊
c
j
+
c
−
b
−
1
a
⌋
−
⌊
c
j
+
c
−
b
−
1
a
⌋
2
]
=
1
2
[
∑
j
=
0
⌊
a
n
+
b
c
⌋
−
1
n
(
n
+
1
)
−
∑
j
=
0
⌊
a
n
+
b
c
⌋
−
1
⌊
c
j
+
c
−
b
−
1
a
⌋
−
∑
j
=
0
⌊
a
n
+
b
c
⌋
−
1
⌊
c
j
+
c
−
b
−
1
a
⌋
2
]
=
1
2
[
⌊
a
n
+
b
c
⌋
n
(
n
+
1
)
−
f
(
c
,
c
−
b
−
1
,
a
,
⌊
a
n
+
b
c
⌋
−
1
)
−
h
(
c
,
c
−
b
−
1
,
a
,
⌊
a
n
+
b
c
⌋
−
1
)
]
\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=1}^{\left\lfloor\frac{ai+b}{c}\right\rfloor} i\\&=\sum\limits_{i=0}^n\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor} i\left[\left\lfloor\frac{ai+b}{c}\right\rfloor\geqslant j\right]\\&=\sum\limits_{i=0}^n\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor} i\left[ai+b \geqslant cj\right]\\&=\sum\limits_{i=0}^n\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor} i\left[i\geqslant\left\lceil\frac{cj-b}{a}\right\rceil\right]\\&=\sum\limits_{i=0}^n\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor} i\left[i\geqslant\left\lfloor\frac{cj+a-b-1}{a}\right\rfloor\right]\\&=\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}\sum\limits_{i=0}^n i\left[i\geqslant\left\lfloor\frac{cj+a-b-1}{a}\right\rfloor\right]\\&=\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor} \sum_{i=\left\lfloor\frac{cj+a-b-1}{a}\right\rfloor}^n i\\&=\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}\frac{\left(n+\left\lfloor\frac{cj+a-b-1}{a}\right\rfloor\right)\left(n-\left\lfloor\frac{cj+a-b-1}{a}\right\rfloor+1\right)}{2}\\&=\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}\frac{\left(n+\left\lfloor\frac{cj-b-1}{a}\right\rfloor+1\right)\left(n-\left\lfloor\frac{cj-b-1}{a}\right\rfloor\right)}{2}\\&=\sum\limits_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}\frac{\left(n+\left\lfloor\frac{c(j+1)-b-1}{a}\right\rfloor+1\right)\left(n-\left\lfloor\frac{c(j+1)-b-1}{a}\right\rfloor\right)}{2}\\&=\sum\limits_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}\frac{\left(n+\left\lfloor\frac{cj+c-b-1}{a}\right\rfloor+1\right)\left(n-\left\lfloor\frac{cj+c-b-1}{a}\right\rfloor\right)}{2}\\&=\frac{1}{2}\sum\limits_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}\left[n(n+1)-\left\lfloor\frac{cj+c-b-1}{a}\right\rfloor-\left\lfloor\frac{cj+c-b-1}{a}\right\rfloor^2\right]\\&=\frac{1}{2}\left[\sum\limits_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}n(n+1)-\sum\limits_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}\left\lfloor\frac{cj+c-b-1}{a}\right\rfloor-\sum\limits_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}\left\lfloor\frac{cj+c-b-1}{a}\right\rfloor^2\right]\\&=\frac{1}{2}\left[\left\lfloor\frac{an+b}{c}\right\rfloor n(n+1)-f\left(c,c-b-1,a,\left\lfloor\frac{an+b}{c}\right\rfloor-1\right)-h\left(c,c-b-1,a,\left\lfloor\frac{an+b}{c}\right\rfloor-1\right)\right]\end{aligned}
g(a,b,c,n)=i=0∑ni⌊cai+b⌋=i=0∑nj=1∑⌊cai+b⌋i=i=0∑nj=1∑⌊can+b⌋i[⌊cai+b⌋⩾j]=i=0∑nj=1∑⌊can+b⌋i[ai+b⩾cj]=i=0∑nj=1∑⌊can+b⌋i[i⩾⌈acj−b⌉]=i=0∑nj=1∑⌊can+b⌋i[i⩾⌊acj+a−b−1⌋]=j=1∑⌊can+b⌋i=0∑ni[i⩾⌊acj+a−b−1⌋]=j=1∑⌊can+b⌋i=⌊acj+a−b−1⌋∑ni=j=1∑⌊can+b⌋2(n+⌊acj+a−b−1⌋)(n−⌊acj+a−b−1⌋+1)=j=1∑⌊can+b⌋2(n+⌊acj−b−1⌋+1)(n−⌊acj−b−1⌋)=j=0∑⌊can+b⌋−12(n+⌊ac(j+1)−b−1⌋+1)(n−⌊ac(j+1)−b−1⌋)=j=0∑⌊can+b⌋−12(n+⌊acj+c−b−1⌋+1)(n−⌊acj+c−b−1⌋)=21j=0∑⌊can+b⌋−1[n(n+1)−⌊acj+c−b−1⌋−⌊acj+c−b−1⌋2]=21⎣⎢⎡j=0∑⌊can+b⌋−1n(n+1)−j=0∑⌊can+b⌋−1⌊acj+c−b−1⌋−j=0∑⌊can+b⌋−1⌊acj+c−b−1⌋2⎦⎥⎤=21[⌊can+b⌋n(n+1)−f(c,c−b−1,a,⌊can+b⌋−1)−h(c,c−b−1,a,⌊can+b⌋−1)]
边界条件为,当
a
=
0
a=0
a=0 时,
g
(
a
,
b
,
c
,
n
)
=
n
(
n
+
1
)
2
⌊
b
c
⌋
g(a,b,c,n)=\frac{n(n+1)}{2}\left\lfloor\frac{b}{c}\right\rfloor
g(a,b,c,n)=2n(n+1)⌊cb⌋ 。
推导 h ( a , b , c , n ) h(a,b,c,n) h(a,b,c,n)
当
a
⩾
c
a\geqslant c
a⩾c 或
b
⩾
c
b\geqslant c
b⩾c 时
h
(
a
,
b
,
c
,
n
)
=
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
2
=
∑
i
=
0
n
[
⌊
(
a
m
o
d
c
)
i
+
(
b
m
o
d
c
)
c
⌋
+
⌊
a
c
⌋
i
+
⌊
b
c
⌋
]
2
=
∑
i
=
0
n
⌊
(
a
m
o
d
c
)
i
+
(
b
m
o
d
c
)
c
⌋
2
+
∑
i
=
0
n
⌊
a
c
⌋
2
i
2
+
∑
i
=
0
n
⌊
b
c
⌋
2
+
2
⌊
a
c
⌋
∑
i
=
0
n
⌊
(
a
m
o
d
c
)
i
+
(
b
m
o
d
c
)
c
⌋
i
+
2
⌊
b
c
⌋
∑
i
=
0
n
⌊
(
a
m
o
d
c
)
i
+
(
b
m
o
d
c
)
c
⌋
+
2
⌊
a
c
⌋
⌊
b
c
⌋
∑
i
=
0
n
i
=
h
(
a
m
o
d
c
,
b
m
o
d
c
,
c
,
n
)
+
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
)
+
n
(
n
+
1
)
(
2
n
+
1
)
6
⌊
a
c
⌋
2
+
(
n
+
1
)
⌊
b
c
⌋
2
+
n
(
n
+
1
)
⌊
a
c
⌋
⌊
b
c
⌋
\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[\left\lfloor\frac{(a\bmod c)i+(b\bmod c)}{c}\right\rfloor+\left\lfloor\frac{a}{c}\right\rfloor i+\left\lfloor\frac{b}{c}\right\rfloor\right]^2\\&=\sum\limits_{i=0}^n\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^2i^2+\sum\limits_{i=0}^n\left\lfloor\frac{b}{c}\right\rfloor^2\\&+2\left\lfloor\frac{a}{c}\right\rfloor\sum\limits_{i=0}^n\left\lfloor\frac{(a\bmod c)i+(b\bmod c)}{c}\right\rfloor i+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\left\lfloor\frac{b}{c}\right\rfloor\sum\limits_{i=0}^n i\\&=h(a\bmod c,b\bmod c,c,n)+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)\\&+\frac{n(n+1)(2n+1)}{6}\left\lfloor\frac{a}{c}\right\rfloor^2+(n+1)\left\lfloor\frac{b}{c}\right\rfloor^2+n(n+1)\left\lfloor\frac{a}{c}\right\rfloor\left\lfloor\frac{b}{c}\right\rfloor\end{aligned}
h(a,b,c,n)=i=0∑n⌊cai+b⌋2=i=0∑n[⌊c(amodc)i+(bmodc)⌋+⌊ca⌋i+⌊cb⌋]2=i=0∑n⌊c(amodc)i+(bmodc)⌋2+i=0∑n⌊ca⌋2i2+i=0∑n⌊cb⌋2+2⌊ca⌋i=0∑n⌊c(amodc)i+(bmodc)⌋i+2⌊cb⌋i=0∑n⌊c(amodc)i+(bmodc)⌋+2⌊ca⌋⌊cb⌋i=0∑ni=h(amodc,bmodc,c,n)+2⌊ca⌋g(amodc,bmodc,c,n)+2⌊cb⌋f(amodc,bmodc,c,n)+6n(n+1)(2n+1)⌊ca⌋2+(n+1)⌊cb⌋2+n(n+1)⌊ca⌋⌊cb⌋
当
a
<
c
a<c
a<c 且
b
<
c
b<c
b<c 时
∀
x
∈
N
+
{\forall} x\in N^+
∀x∈N+,有如下骚操作
x
2
=
2
×
x
(
x
+
1
)
2
−
x
=
2
∑
i
=
1
x
i
−
x
x^2=2\times \frac{x(x+1)}{2}-x=2\sum\limits_{i=1}^xi -x
x2=2×2x(x+1)−x=2i=1∑xi−x
h
(
a
,
b
,
c
,
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
−
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
=
2
∑
i
=
0
n
∑
j
=
1
⌊
a
n
+
b
c
⌋
j
[
⌊
a
i
+
b
c
⌋
⩾
j
]
−
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
=
2
∑
i
=
0
n
∑
j
=
1
⌊
a
n
+
b
c
⌋
j
[
a
i
+
b
⩾
c
j
]
−
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
=
2
∑
i
=
0
n
∑
j
=
1
⌊
a
n
+
b
c
⌋
j
[
i
⩾
⌈
c
j
−
b
a
⌉
]
−
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
=
2
∑
j
=
1
⌊
a
n
+
b
c
⌋
j
∑
i
=
0
n
[
i
⩾
⌈
c
j
−
b
a
⌉
]
−
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
=
2
∑
j
=
1
⌊
a
n
+
b
c
⌋
j
∑
i
=
0
n
[
i
⩾
⌊
c
j
+
a
−
b
−
1
a
⌋
]
−
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
=
2
∑
j
=
1
⌊
a
n
+
b
c
⌋
[
j
(
n
−
⌊
c
j
+
a
−
b
−
1
a
⌋
+
1
)
]
−
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
=
2
∑
j
=
1
⌊
a
n
+
b
c
⌋
[
j
(
n
−
⌊
c
j
−
b
−
1
a
⌋
)
]
−
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
=
2
∑
j
=
0
⌊
a
n
+
b
c
⌋
−
1
[
(
j
+
1
)
(
n
−
⌊
c
(
j
+
1
)
−
b
−
1
a
⌋
)
]
−
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
=
2
∑
j
=
0
⌊
a
n
+
b
c
⌋
−
1
[
(
j
+
1
)
(
n
−
⌊
c
j
+
c
−
b
−
1
a
⌋
)
]
−
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
=
2
n
∑
j
=
0
⌊
a
n
+
b
c
⌋
−
1
(
j
+
1
)
−
2
∑
j
=
0
⌊
a
n
+
b
c
⌋
−
1
j
⌊
c
j
+
c
−
b
−
1
a
⌋
−
2
∑
j
=
0
⌊
a
n
+
b
c
⌋
−
1
⌊
c
j
+
c
−
b
−
1
a
⌋
−
∑
i
=
0
n
⌊
a
i
+
b
c
⌋
=
⌊
a
n
+
b
c
⌋
(
⌊
a
n
+
b
c
⌋
+
1
)
n
−
2
g
(
c
,
c
−
b
−
1
,
a
,
⌊
a
n
+
b
c
⌋
−
1
)
−
2
f
(
c
,
c
−
b
−
1
,
a
,
⌊
a
n
+
b
c
⌋
−
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\left(2\sum\limits_{j=1}^{\left\lfloor\frac{ai+b}{c}\right\rfloor}j-\left\lfloor\frac{ai+b}{c}\right\rfloor\right)\\&=2\sum\limits_{i=0}^n\sum\limits_{j=1}^{\left\lfloor\frac{ai+b}{c}\right\rfloor}j-\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\\&=2\sum\limits_{i=0}^n\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}j\left[\left\lfloor\frac{ai+b}{c}\right\rfloor\geqslant j\right]-\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\\&=2\sum\limits_{i=0}^n\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}j\left[ai+b\geqslant cj\right]-\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\\&=2\sum\limits_{i=0}^n\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}j\left[i\geqslant\left\lceil\frac{cj-b}{a}\right\rceil\right]-\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\\&=2\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}j\sum\limits_{i=0}^{n}\left[i\geqslant\left\lceil\frac{cj-b}{a}\right\rceil\right]-\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\\&=2\sum\limits_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}j\sum\limits_{i=0}^{n}\left[i\geqslant\left\lfloor\frac{cj+a-b-1}{a}\right\rfloor\right]-\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\\&=2\sum_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}\left[j\left(n-\left\lfloor\frac{cj+a-b-1}{a}\right\rfloor+1\right)\right]-\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\\&=2\sum_{j=1}^{\left\lfloor\frac{an+b}{c}\right\rfloor}\left[j\left(n-\left\lfloor\frac{cj-b-1}{a}\right\rfloor\right)\right]-\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\\&=2\sum_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}\left[(j+1)\left(n-\left\lfloor\frac{c(j+1)-b-1}{a}\right\rfloor\right)\right]-\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\\&=2\sum_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}\left[(j+1)\left(n-\left\lfloor\frac{cj+c-b-1}{a}\right\rfloor\right)\right]-\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\\&=2n\sum_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}(j+1)-2\sum_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}j\left\lfloor\frac{cj+c-b-1}{a}\right\rfloor-2\sum_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}\left\lfloor\frac{cj+c-b-1}{a}\right\rfloor-\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\\&=\left\lfloor\frac{an+b}{c}\right\rfloor\left(\left\lfloor\frac{an+b}{c}\right\rfloor+1\right)n-2g\left(c,c-b-1,a,\left\lfloor\frac{an+b}{c}\right\rfloor-1\right)\\&-2f\left(c,c-b-1,a,\left\lfloor\frac{an+b}{c}\right\rfloor-1\right)-f(a,b,c,n)\end{aligned}
h(a,b,c,n)=i=0∑n⌊cai+b⌋2=i=0∑n⎝⎜⎛2j=1∑⌊cai+b⌋j−⌊cai+b⌋⎠⎟⎞=2i=0∑nj=1∑⌊cai+b⌋j−i=0∑n⌊cai+b⌋=2i=0∑nj=1∑⌊can+b⌋j[⌊cai+b⌋⩾j]−i=0∑n⌊cai+b⌋=2i=0∑nj=1∑⌊can+b⌋j[ai+b⩾cj]−i=0∑n⌊cai+b⌋=2i=0∑nj=1∑⌊can+b⌋j[i⩾⌈acj−b⌉]−i=0∑n⌊cai+b⌋=2j=1∑⌊can+b⌋ji=0∑n[i⩾⌈acj−b⌉]−i=0∑n⌊cai+b⌋=2j=1∑⌊can+b⌋ji=0∑n[i⩾⌊acj+a−b−1⌋]−i=0∑n⌊cai+b⌋=2j=1∑⌊can+b⌋[j(n−⌊acj+a−b−1⌋+1)]−i=0∑n⌊cai+b⌋=2j=1∑⌊can+b⌋[j(n−⌊acj−b−1⌋)]−i=0∑n⌊cai+b⌋=2j=0∑⌊can+b⌋−1[(j+1)(n−⌊ac(j+1)−b−1⌋)]−i=0∑n⌊cai+b⌋=2j=0∑⌊can+b⌋−1[(j+1)(n−⌊acj+c−b−1⌋)]−i=0∑n⌊cai+b⌋=2nj=0∑⌊can+b⌋−1(j+1)−2j=0∑⌊can+b⌋−1j⌊acj+c−b−1⌋−2j=0∑⌊can+b⌋−1⌊acj+c−b−1⌋−i=0∑n⌊cai+b⌋=⌊can+b⌋(⌊can+b⌋+1)n−2g(c,c−b−1,a,⌊can+b⌋−1)−2f(c,c−b−1,a,⌊can+b⌋−1)−f(a,b,c,n)
边界条件为,当
a
=
0
a=0
a=0 时,
h
(
a
,
b
,
c
,
n
)
=
(
n
+
1
)
⌊
b
c
⌋
2
h(a,b,c,n)=(n+1)\left\lfloor\frac{b}{c}\right\rfloor^2
h(a,b,c,n)=(n+1)⌊cb⌋2
洛谷 P5170 【模板】类欧几里得算法 ↬ \looparrowright ↬
题目描述
给定 n , , a , b , c n,,a,b,c n,,a,b,c,分别求 ∑ i = 0 n ⌊ a i + b c ⌋ , ∑ i = 0 n ⌊ a i + b c ⌋ 2 , ∑ i = 0 n i ⌊ a i + b c ⌋ \sum\limits_{i=0}^n\left\lfloor \frac{ai+b}{c} \right\rfloor, \sum\limits_{i=0}^n\left\lfloor \frac{ai+b}{c} \right\rfloor^2,\sum\limits_{i=0}^ni\left\lfloor \frac{ai+b}{c} \right\rfloor i=0∑n⌊cai+b⌋,i=0∑n⌊cai+b⌋2,i=0∑ni⌊cai+b⌋ ,答案对 998244353 998244353 998244353 取模。多组数据。
输入格式
第一行给出数据组数
t
t
t 。
接下来
t
t
t 行,每行有四个整数,分别为每组数据的
n
,
a
,
b
,
c
n, a, b, c
n,a,b,c 。
输出格式
对于每组数据,输出一行三个整数,为三个答案对 998244353 998244353 998244353 取模的结果。
输入输出样例
输入 #1
2
2 1 0 2
4 3 9 6
输出 #1
1 1 2
11 27 27
说明/提示
本题采用
S
p
e
c
i
a
l
J
u
d
g
e
\mathrm{Special}\ \mathrm{Judge}
Special Judge 。
答对所有第一问可以获得测试点
40
%
40\%
40% 的分数,答对所有第二问、第三问可以分别获得另外
30
%
30\%
30% 的分数。
测试点编号 | 特殊性质 |
---|---|
1 1 1 | n , a , b , c ⩽ 10 n,a,b,c\leqslant 10 n,a,b,c⩽10 |
2 ∼ 3 2\sim3 2∼3 | n , a , b , c ⩽ 100 n,a,b,c\leqslant100 n,a,b,c⩽100 |
4 4 4 | n , a , b , c ⩽ 1 0 6 n,a,b,c\leqslant10^6 n,a,b,c⩽106 |
5 5 5 | t = 1 t=1 t=1 |
6 ∼ 10 6\sim10 6∼10 | 无 |
对于所有测试点,有 1 ⩽ t ⩽ 1 0 5 , 0 ⩽ n , a , b , c ⩽ 1 0 9 , c ≠ 0 1 \leqslant t \leqslant 10^5,\ 0 \leqslant n,a,b,c \leqslant 10^9, c \neq 0 1⩽t⩽105, 0⩽n,a,b,c⩽109,c=0 。
分析
在计算的时侯,因为三个函数各有交错递归,因此可以考虑三个函数打包成结构体一起整体递归,同步计算,否则有很多项会被多次计算。
类欧几里得算法时间复杂度为
O
(
log
n
)
O(\log n)
O(logn) 。
代码
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
const ll mod=998244353;
/*-----2,6的乘法逆元-----*/
const ll inv2=499122177;
const ll inv6=166374059;
/*-----用快速幂得到------*/
/*ll quick_pow(ll a,ll b)
{
ll res=1;
while(b)
{
if(b&1) res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
int main()
{
cout<<quick_pow(2,mod-2)<<endl;
cout<<quick_pow(6,mod-2)<<endl;
return 0;
}*/
struct A//将答案打包成结构体
{
ll f;
ll g;
ll h;
};
A cal(ll a,ll b,ll c,ll n)//按照以上推得的公式进行递归
{
A res,temp;
if(!a)
{
res.f=(n+1)*(b/c)%mod;
res.g=(b/c)*n%mod*(n+1)%mod*inv2%mod;
res.h=(n+1)*(b/c)%mod*(b/c)%mod;
}
else if(a>=c||b>=c)
{
temp=cal(a%c,b%c,c,n);
res.f=((a/c)*n%mod*(n+1)%mod*inv2%mod
+(b/c)*(n+1)%mod+temp.f)%mod;
res.g=((a/c)*n%mod*(n+1)%mod*(2*n+1)%mod*inv6%mod
+(b/c)*n%mod*(n+1)%mod*inv2%mod+temp.g)%mod;
res.h=((a/c)*(a/c)%mod*n%mod*(n+1)%mod*(2*n+1)%mod*inv6%mod
+(b/c)*(b/c)%mod*(n+1)%mod+(a/c)*(b/c)%mod*n%mod*(n+1)%mod
+temp.h+2*(a/c)%mod*temp.g+2*(b/c)%mod*temp.f)%mod;
}
else
{
ll m=(a*n+b)/c;
temp=cal(c,c-b-1,a,m-1);
res.f=(n*(m%mod)%mod-temp.f)%mod;
res.g=(n*(n+1)%mod*(m%mod)%mod-temp.f-temp.h)%mod*inv2%mod;
res.h=(n*(m%mod)%mod*((m+1)%mod)%mod-2*temp.g-2*temp.f-res.f)%mod;
}
return res;
}
int main()
{
int _;
for(cin>>_;_;_--)
{
ll n,a,b,c;
scanf("%lld%lld%lld%lld",&n,&a,&b,&c);
A ans=cal(a,b,c,n);
//注意负数的问题
printf("%lld %lld %lld\n",(ans.f+mod)%mod,(ans.h+mod)%mod,(ans.g+mod)%mod);
}
return 0;
}