P5170类欧几里得算法推式子过程
__CrossBow_EXE__
·
·
个人记录
原题一共有三问:
- 求 F(a,b,c,n)=\sum\limits_{i=0}^{n} \lfloor \frac{ai+b}{c} \rfloor
- 求 G(a,b,c,n)=\sum\limits_{i=0}^{n} \lfloor \frac{ai+b}{c} \rfloor^2
- 求 H(a,b,c,n)=\sum\limits_{i=0}^{n}i\lfloor \frac{ai+b}{c} \rfloor
答案对 998244353 取模。
第一问
分类讨论。
(a \ge c )\vee(b \ge c)
众所周知 \lfloor \frac{a}{c} \rfloor \iff \lfloor \frac{\lfloor \frac{a}{c} \rfloor c+(a\bmod c)}{c} \rfloor
所以我们有
\begin{aligned}
&F(a, b, c, n) \\
=&\sum_{i = 0}^{n}\left\lfloor\frac{a i+b}{c}\right\rfloor \\
=&\sum_{i = 0}^{n}\left(\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\right) \\
=&\sum_{i = 0}^{n}\left(\left\lfloor\frac{(a \bmod c) i+(b \bmod c)}{c}\right\rfloor+i\left\lfloor\frac{a}{c}\right\rfloor+\left\lfloor\frac{b}{c}\right\rfloor\right) \\
=&\sum_{i = 0}^{n}\left\lfloor\frac{(a \bmod c) i+(b \bmod c)}{c}\right\rfloor+\sum_{i = 0}^{n} i\left\lfloor\frac{a}{c}\right\rfloor+\sum_{i = 0}^{n}\left\lfloor\frac{b}{c}\right\rfloor \\
=&F(a \bmod c, b \bmod c, c, n)+\frac{n(n+1)}{2}\left\lfloor\frac{a}{c}\right\rfloor+(n+1)\left\lfloor\frac{b}{c}\right\rfloor
\end{aligned}
(a<c) \wedge (b<c)
我们需要知道两个前置芝士:
-
n=\sum\limits_{i=0}^{n-1}1
-
[x]$ 被称为“艾弗森括号”,当 $x$ 为真时它为 $1$,否则为 $0$。根据定义有 $\sum\limits_{i=0}^{n}[i>x]=n-x
知道了这个,我们来化简原式。
F(a,b,c,n)=\sum_{i=0}^{n}\left\lfloor \frac{ai+b}{c} \right\rfloor=\sum_{i=0}^n\sum_{j=0}^{\left\lfloor\frac{ai+b}{c}\right\rfloor-1} 1
对于两层 \sum,我们可以调换顺序,只是需要稍微修改一下,变为
\sum_{j=0}^{\left \lfloor \frac{an+b}{c} \right\rfloor -1} \sum_{i=0}^{n}\left[j<\left\lfloor \frac{ai+b}{c}\right \rfloor\right]
接下来我们化简艾弗森括号中的内容。
\begin{aligned}
&j<\left \lfloor \frac{ai+b}{c} \right\rfloor\\
\Rightarrow &j+1 \le \left \lfloor \frac{ai+b}{c} \right \rfloor\\
\Rightarrow &j+1 \le \frac{ai+b}{c}\\
\Rightarrow &j+c+c-b \le ai\\
\Rightarrow &jc+c-b-1 < ai\\
\Rightarrow &i>\left \lfloor \frac{jc+c-b-1}{a}\right \rfloor
\end{aligned}
我们“承上启下”,把它套回去
\sum^{\lfloor \frac{an+b}{c} \rfloor-1}_{j=0}(n-\left \lfloor \frac{jc+c-b-1}{a} \right \rfloor)
令 m=\left\lfloor \frac{an+b}{c} \right\rfloor
那么我们有
\begin{aligned}
&F(a,b,c,n)\\
=&\sum_{i=0}^{m-1}\left(n-\left\lfloor \frac{ci+(c-b-1)}{a} \right\rfloor\right) \\
=&\sum_{i=0}^{m-1}n-\sum_{i=0}^{m-1}\left\lfloor \frac{ci+(c-b-1)}{a} \right\rfloor\\
=&nm-F(c,c-b-1,a,m-1)
\end{aligned}
边界情况
当 $a=0$ 时,
$$
\begin{aligned}
&F(0,b,c,n)\\
=&\sum_{i=0}^{n} \lfloor \frac{b}{c} \rfloor\\
=&(n+1)\lfloor \frac{b}{c} \rfloor
\end{aligned}
$$
还有一种边界情况,当 $n=0$ 时,$F(a,b,c,0)$ 显然为 $\lfloor \frac{b}{c} \rfloor$。
## 总结
把上面的内容结合起来,就能得出最终式子了。
$$
F(a, b, c, n)=
\left\{\begin{array}{c}
(n+1)\left\lfloor\frac{b}{c}\right\rfloor & a=0 \\
\left\lfloor\frac{b}{c}\right\rfloor&n=0 \\
F(a \bmod c, b \bmod c, c, n)+\frac{n(n+1)}{2}\left\lfloor\frac{a}{c}\right\rfloor+(n+1)\left\lfloor\frac{b}{c}\right\rfloor&(a \geq c) \vee (b \geq c)\\
n m-F(c, c-b-1, a, m-1) &(a<c) \wedge (b<c)
\end{array}\right.
$$
# 第二问
还是分类讨论。
## $(a \ge c )\vee(b \ge c)
\begin{aligned}
&G(a,b,c,n)\\
=&\sum^{n}_{i=0}\left \lfloor \frac{ai+b}{c}\right \rfloor ^2\\
=&\sum^n_{i=0}\left \lfloor \frac{\left (\left \lfloor \frac{a}{c}\right \rfloor c +(a\bmod c) \right )i+\left \lfloor \frac{b}{c}\right \rfloor c+(b \bmod c)}{c} \right \rfloor ^2\\
=&\sum^n_{i=0}\left \lfloor \left \lfloor \frac{a}{c} \right \rfloor i+\left \lfloor \frac{b}{c} \right \rfloor +\frac{(a \bmod c)i+(b \bmod c)}{c} \right \rfloor ^2
\end{aligned}
依旧需要一些前置芝士:
(a+b+c)^2=a^2+b^2+c^2+2ab+2bc+2ca
令 t=\left \lfloor \frac{a\bmod c\times i+b \bmod c}{c} \right \rfloor,式子就变成了:
\begin{aligned}
&\sum_{i=0}^{n}\left(\left\lfloor\frac{a}{c}\right\rfloor^{2} i^{2}+\left\lfloor\frac{b}{c}\right\rfloor^{2}+t^{2}+2\left\lfloor\frac{a}{c}\right\rfloor\left\lfloor\frac{b}{c}\right\rfloor i+2\left\lfloor\frac{a}{c}\right\rfloor i t+2\left\lfloor\frac{b}{c}\right\rfloor t\right) \\
=&\sum_{i=0}^{n}\left\lfloor\frac{a}{c}\right\rfloor^{2} i^{2}+\sum_{i=0}^{n}\left\lfloor\frac{b}{c}\right\rfloor^{2}+\sum_{i=0}^{n} t^{2}+\sum_{i=0}^{n} 2\left\lfloor\frac{a}{c}\right\rfloor\left\lfloor\frac{b}{c}\right\rfloor i+\sum_{i=0}^{n} 2\left\lfloor\frac{a}{c}\right\rfloor i t+\sum_{i=0}^{n} 2\left\lfloor\frac{b}{c}\right\rfloor t \\
\end{aligned}
这个式子只是项数多,整理一下得到
\begin{aligned}
G(a, b, c, n)&=G(a \bmod c, b \bmod c, c, n)+2\left\lfloor\frac{a}{c}\right\rfloor H(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) \\
&+(n+1)\left\lfloor\frac{b}{c}\right\rfloor^{2}+\left\lfloor\frac{a}{c}\right\rfloor^{2} \frac{n(n+1)(2 n+1)}{6}+\left\lfloor\frac{a}{c}\right\rfloor\left\lfloor\frac{b}{c}\right\rfloor n(n+1) \\
\end{aligned}
所以,它会调用另外的两个函数,并且会一直递归。
(a<c) \wedge(b<c)
如果我们像之前一样换枚举,很难对付平方。可以用一种十分巧妙的方法来绕过它:
\begin{aligned}
&n^2\\
=&(n^2+n)-n\\
=&2\times\frac{n(n+1)}{2}-n\\
=&\left(2\sum^{n}_{i=1} i\right )-n
\end{aligned}
这样问题就简单很多了。
\begin{aligned}
&G(a, b, c, n)\\
=&\sum_{i=0}^{n}\left(2 \sum_{j=1}^{\left\lfloor\frac{a i+b}{c}\right\rfloor} j-\left\lfloor\frac{a i+b}{c}\right\rfloor\right) \\
=&2 \sum_{i=0}^{n} \sum_{j=0}^{\left\lfloor \frac{a i+b}{c}\right\rfloor -1}(j+1)-F(a, b, c, n) \\
\end{aligned}
对于前一项,依旧用老方法换枚举。这样左边就是
2 \sum_{j=0}^{m-1}(j+1) \sum_{i=0}^{n}\left[j<\left\lfloor\frac{a i+b}{c}\right\rfloor\right] \\
不等式变换和上面一样。
\begin{aligned}
&2 \sum_{j=0}^{m-1}(j+1) \sum_{i=0}^{n}\left[i>\left\lfloor\frac{j c+c-b-1}{a}\right\rfloor\right] \\
=&2 \sum_{j=0}^{m-1}(j+1)\left(n-\left\lfloor\frac{j c+c-b-1}{a}\right\rfloor\right) \\
=&2 \sum_{i=0}^{m-1}\left(n i+n-i\left\lfloor\frac{c i+c-b-1}{a}\right\rfloor-\left\lfloor\frac{c i-c-b-1}{a}\right\rfloor\right) \\
=&n m(m+1)-2 H(c, c-b-1, a, m-1)-2 F(c, c-b-1, a, m-1) \\
\end{aligned}
边界情况
很显然,如果 a=0,那结果就是 (n+1)\left \lfloor \frac{b}{c} \right \rfloor ^2。如果 n=0,那就是 \left \lfloor \frac{b}{c} \right \rfloor^2。
总结
G(a, b, c, n)
=\left\{\begin{array}{c}
(n+1)\left\lfloor\frac{b}{c}\right\rfloor^{2} &a=0 \\
\left\lfloor\frac{b}{c}\right\rfloor^{2} &n=0 \\
n m(m+1)-2 H(c, c-b-1, a, m-1)-2 F(c, c-b-1, a, m-1)-F(a, b, c, n) &a<c \wedge b<c \\
G(a \bmod c, b \bmod c, c, n)+2\left\lfloor\frac{a}{c}\right\rfloor H(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)+\\
(n+1)\left\lfloor\frac{b}{c}\right\rfloor^{2}+\left\lfloor\frac{a}{c}\right\rfloor^{2} \frac{n(n+1)(2 n+1)}{6}+\left\lfloor\frac{a}{c}\right\rfloor\left\lfloor\frac{b}{c}\right\rfloor n(n+1) &a \geq c \vee b \geq c\\
\end{array}\right.
第三问
依旧分类讨论。
(a \ge c )\vee(b \ge c)
与之前类似,还是一样的操作。
\begin{aligned}
&H(a, b, c, n)=\sum_{i=0}^{n} i\left|\frac{a i+b}{c}\right| \\
=&\sum_{i=0}^{n} i\left[\frac{\left(a \bmod c+\left\lfloor\frac{a}{c}\right\rfloor c\right) i+\left(b \bmod c+\left\lfloor\frac{b}{c}\right\rfloor c\right)}{c}\right] \\
=&\sum_{i=0}^{n} i\left|\frac{(a \bmod c) i+(b \bmod c)}{c}+i\right| \frac{a}{c}\left|+\left|\frac{b}{c}\right|\right| \\
=&\sum_{i=0}^{n} i\left|\frac{(a \bmod c) i+(b \bmod c)}{c}\right|+\sum_{i=0}^{n} i^{2}\left\lfloor\frac{a}{c}\right\rfloor+\sum_{i=0}^{n} i\left|\frac{b}{c}\right| \\
=&H(a \bmod c, b \bmod c, c, n)+\frac{n(n+1)(2 n+1)}{6}\left\lfloor\frac{a}{c}\right\rfloor+\frac{n(n+1)}{2}\left\lfloor\frac{b}{c}\right\rfloor \\
\end{aligned}
(a<c) \wedge(b<c)
$$
\begin{aligned}
&H(a,b,c,n)\\
=&\sum_{i=0}^{n} i\left|\frac{a i+b}{c}\right| \\
=&\sum_{i=0}^{n} i \sum_{j=0}^{\left\lfloor\left.\frac{ai+b}{c}\right|-1\right.} 1 \\
=&\sum_{j=0}^{m-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\left[i>\left[\frac{j c+(c-b-1)}{a}\right]\right] \\
\end{aligned}
$$
不等式的变换也和前面相同。令 $t=\left \lfloor \frac{jc+c-b-1}{a} \right \rfloor$,那么
$$
\begin{aligned}
&H(a, b, c, n)\\
=&\sum_{j=0}^{m-1} \sum_{i=0}^{n} i[i>t] \\
=&\sum_{j=0}^{m-1} \sum_{i=t+1}^{n} i \\
=&\sum_{j=0}^{m-1} \frac{(n-t)(n+t+1)}{2} \\
=&\frac{1}{2} \sum_{j=0}^{m-1}\left(n(n+1)-t^{2}-t\right) \\
=&\frac{1}{2}\left(m n(n+1)-\sum_{i=0}^{m-1} t^{2}-\sum_{i=0}^{m-1} t\right) \\
\end{aligned}
$$
接着把 $t$ 展开。注意 $j$ 改名了,展开时不要忘记改名。
$$
\begin{aligned}
&\frac{1}{2}\left(m n(n+1)-\sum_{i=0}^{m-1}\left\lfloor\left.\frac{c i+c-b-1}{a}\right|^{2}-\sum_{i=0}^{m-1}\left\lfloor\frac{c i+c-b-1}{a}\right\rfloor\right)\right. \\
=&\frac{1}{2}(mn(n+1)-G(c, c-b-1, a, m-1)-F(c, c-b-1, a, m-1)) \\
\end{aligned}
$$
于是我们发现,这个 $H$ 函数又一次调用了前面的函数。
## 边界情况
边界情况比较好考虑。如果 $n=0$,原式显然为 $0$;如果 $a=0$,原式显然为 $\frac{n(n+1)}{2}\left\lfloor\frac{b}{c}\right\rfloor$。
## 总结
下面是函数 $H$ 的公式:
$$
\begin{aligned}
H(a, b, c, n)
=\left\{\begin{array}{c}
0 &n=0 \\
\frac{n(n+1)}{2}\left\lfloor\frac{b}{c}\right\rfloor&a=0 \\
H(a \bmod c, b \bmod c, c, n)+\frac{n(n+1)(2 n+1)}{6}\left\lfloor\frac{a}{c}\right\rfloor +\frac{n(n+1)}{2}\left\lfloor \frac{b}{c}\right\rfloor & (a \geq c) \vee (b \geq c) \\
\frac{1}{2}(m n(n+1)-G(c, c-b-1,a, m-1)-F(c, c-b-1, a, m-1))& (a<c) \wedge (b<c)
\end{array}\right.
\end{aligned}
$$
# 代码
代码的细节比较多,所以仔细说一下。
首先,题目让把答案取模,所以代码中除以 $2$ 和 $6$ 的部分应该乘它们的逆元。