专栏文章

P5170类欧几里得算法推式子过程

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip8erz3
此快照首次捕获于
2025/12/03 07:51
3 个月前
此快照最后确认于
2025/12/03 07:51
3 个月前
查看原文
原题一共有三问:
  • F(a,b,c,n)=i=0nai+bcF(a,b,c,n)=\sum\limits_{i=0}^{n} \lfloor \frac{ai+b}{c} \rfloor
  • G(a,b,c,n)=i=0nai+bc2G(a,b,c,n)=\sum\limits_{i=0}^{n} \lfloor \frac{ai+b}{c} \rfloor^2
  • H(a,b,c,n)=i=0niai+bcH(a,b,c,n)=\sum\limits_{i=0}^{n}i\lfloor \frac{ai+b}{c} \rfloor
答案对 998244353998244353 取模。

第一问

分类讨论。

(ac)(bc)(a \ge c )\vee(b \ge c)

众所周知 ac    acc+(amodc)c\lfloor \frac{a}{c} \rfloor \iff \lfloor \frac{\lfloor \frac{a}{c} \rfloor c+(a\bmod c)}{c} \rfloor
所以我们有
F(a,b,c,n)=i=0nai+bc=i=0n(acc+(amodc))i+(bcc+(bmodc))c)=i=0n((amodc)i+(bmodc)c+iac+bc)=i=0n(amodc)i+(bmodc)c+i=0niac+i=0nbc=F(amodc,bmodc,c,n)+n(n+1)2ac+(n+1)bc\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)(b<c)(a<c) \wedge (b<c)

我们需要知道两个前置芝士:
  • n=i=0n11n=\sum\limits_{i=0}^{n-1}1
  • [x][x] 被称为“艾弗森括号”,当 xx 为真时它为 11,否则为 00。根据定义有 i=0n[i>x]=nx\sum\limits_{i=0}^{n}[i>x]=n-x
知道了这个,我们来化简原式。
F(a,b,c,n)=i=0nai+bc=i=0nj=0ai+bc11F(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,我们可以调换顺序,只是需要稍微修改一下,变为
j=0an+bc1i=0n[j<ai+bc]\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]
接下来我们化简艾弗森括号中的内容。
j<ai+bcj+1ai+bcj+1ai+bcj+c+cbaijc+cb1<aii>jc+cb1a\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}
我们“承上启下”,把它套回去
j=0an+bc1(njc+cb1a)\sum^{\lfloor \frac{an+b}{c} \rfloor-1}_{j=0}(n-\left \lfloor \frac{jc+c-b-1}{a} \right \rfloor)
m=an+bcm=\left\lfloor \frac{an+b}{c} \right\rfloor
那么我们有
F(a,b,c,n)=i=0m1(nci+(cb1)a)=i=0m1ni=0m1ci+(cb1)a=nmF(c,cb1,a,m1)\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}

边界情况

aa 是分母,所以需要讨论 a=0a=0 的情况。
a=0a=0 时,
F(0,b,c,n)=i=0nbc=(n+1)bc\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=0n=0 时,F(a,b,c,0)F(a,b,c,0) 显然为 bc\lfloor \frac{b}{c} \rfloor

总结

把上面的内容结合起来,就能得出最终式子了。
F(a,b,c,n)={(n+1)bca=0bcn=0F(amodc,bmodc,c,n)+n(n+1)2ac+(n+1)bc(ac)(bc)nmF(c,cb1,a,m1)(a<c)(b<c)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.

第二问

还是分类讨论。

(ac)(bc)(a \ge c )\vee(b \ge c)

G(a,b,c,n)=i=0nai+bc2=i=0n(acc+(amodc))i+bcc+(bmodc)c2=i=0naci+bc+(amodc)i+(bmodc)c2\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=a2+b2+c2+2ab+2bc+2ca(a+b+c)^2=a^2+b^2+c^2+2ab+2bc+2ca
t=amodc×i+bmodcct=\left \lfloor \frac{a\bmod c\times i+b \bmod c}{c} \right \rfloor,式子就变成了:
i=0n(ac2i2+bc2+t2+2acbci+2acit+2bct)=i=0nac2i2+i=0nbc2+i=0nt2+i=0n2acbci+i=0n2acit+i=0n2bct\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}
这个式子只是项数多,整理一下得到
G(a,b,c,n)=G(amodc,bmodc,c,n)+2acH(amodc,bmodc,c,n)+2bcF(amodc,bmodc,c,n)+(n+1)bc2+ac2n(n+1)(2n+1)6+acbcn(n+1)\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)(b<c)(a<c) \wedge(b<c)

如果我们像之前一样换枚举,很难对付平方。可以用一种十分巧妙的方法来绕过它:
n2=(n2+n)n=2×n(n+1)2n=(2i=1ni)n\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}
这样问题就简单很多了。
G(a,b,c,n)=i=0n(2j=1ai+bcjai+bc)=2i=0nj=0ai+bc1(j+1)F(a,b,c,n)\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}
对于前一项,依旧用老方法换枚举。这样左边就是
2j=0m1(j+1)i=0n[j<ai+bc]2 \sum_{j=0}^{m-1}(j+1) \sum_{i=0}^{n}\left[j<\left\lfloor\frac{a i+b}{c}\right\rfloor\right] \\
不等式变换和上面一样。
2j=0m1(j+1)i=0n[i>jc+cb1a]=2j=0m1(j+1)(njc+cb1a)=2i=0m1(ni+nici+cb1acicb1a)=nm(m+1)2H(c,cb1,a,m1)2F(c,cb1,a,m1)\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=0a=0,那结果就是 (n+1)bc2(n+1)\left \lfloor \frac{b}{c} \right \rfloor ^2。如果 n=0n=0,那就是 bc2\left \lfloor \frac{b}{c} \right \rfloor^2

总结

G(a,b,c,n)={(n+1)bc2a=0bc2n=0nm(m+1)2H(c,cb1,a,m1)2F(c,cb1,a,m1)F(a,b,c,n)a<cb<cG(amodc,bmodc,c,n)+2acH(amodc,bmodc,c,n)+2bcF(amodc,bmodc,c,n)+(n+1)bc2+ac2n(n+1)(2n+1)6+acbcn(n+1)acbcG(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.

第三问

依旧分类讨论。

(ac)(bc)(a \ge c )\vee(b \ge c)

与之前类似,还是一样的操作。
H(a,b,c,n)=i=0niai+bc=i=0ni[(amodc+acc)i+(bmodc+bcc)c]=i=0ni(amodc)i+(bmodc)c+iac+bc=i=0ni(amodc)i+(bmodc)c+i=0ni2ac+i=0nibc=H(amodc,bmodc,c,n)+n(n+1)(2n+1)6ac+n(n+1)2bc\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)(b<c)(a<c) \wedge(b<c)

mm 的含义与前面相同。
H(a,b,c,n)=i=0niai+bc=i=0nij=0ai+bc11=j=0m1i=0ni[j<ai+bc]=j=0m1i=0ni[i>[jc+(cb1)a]]\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=jc+cb1at=\left \lfloor \frac{jc+c-b-1}{a} \right \rfloor,那么
H(a,b,c,n)=j=0m1i=0ni[i>t]=j=0m1i=t+1ni=j=0m1(nt)(n+t+1)2=12j=0m1(n(n+1)t2t)=12(mn(n+1)i=0m1t2i=0m1t)\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}
接着把 tt 展开。注意 jj 改名了,展开时不要忘记改名。
12(mn(n+1)i=0m1ci+cb1a2i=0m1ci+cb1a)=12(mn(n+1)G(c,cb1,a,m1)F(c,cb1,a,m1))\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}
于是我们发现,这个 HH 函数又一次调用了前面的函数。

边界情况

边界情况比较好考虑。如果 n=0n=0,原式显然为 00;如果 a=0a=0,原式显然为 n(n+1)2bc\frac{n(n+1)}{2}\left\lfloor\frac{b}{c}\right\rfloor

总结

下面是函数 HH 的公式:
H(a,b,c,n)={0n=0n(n+1)2bca=0H(amodc,bmodc,c,n)+n(n+1)(2n+1)6ac+n(n+1)2bc(ac)(bc)12(mn(n+1)G(c,cb1,a,m1)F(c,cb1,a,m1))(a<c)(b<c)\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}

代码

代码的细节比较多,所以仔细说一下。
首先,题目让把答案取模,所以代码中除以 2266 的部分应该乘它们的逆元。

评论

0 条评论,欢迎与作者交流。

正在加载评论...