类欧几里得算法

类欧几里得算法

参考博客

我们要求下面的函数:
\[ F(a,b,c,n)=\sum_{i=0}^n\lfloor\frac{a*i+b}{c}\rfloor \]
我们的方法是分两类情况递归下去求解。

边界条件:\(a=0\)是,\(F=(n+1)\lfloor \frac{b}{c} \rfloor\)。

1.\(a\geq c\)或\(b\geq c\):

首先我们有如下的变换:
\[ \begin{align} \lfloor\frac{a*i+b}{c} \rfloor&=\lfloor\frac{a*i+b\bmod c}{c} \rfloor +\lfloor\frac{b}{c} \rfloor \\ &=\lfloor\frac{(a*i) \bmod c+b\bmod c}{c} \rfloor +\lfloor\frac{a*i}{c} \rfloor +\lfloor\frac{b}{c} \rfloor \\ &=\lfloor\frac{(a\bmod c*i)\bmod c+b\bmod c}{c} \rfloor +i*\lfloor\frac{a}{c}\rfloor+\lfloor\frac{a\bmod c*i}{c} \rfloor +\lfloor\frac{b}{c} \rfloor \\ &=\lfloor\frac{a\bmod c*i+b\bmod c}{c} \rfloor + i*\lfloor\frac{a}{c}\rfloor +\lfloor\frac{b}{c} \rfloor \\ \end{align} \]
设:
\[ a=x*c+y \]
则:
\[ \lfloor\frac{a}{c} \rfloor=\lfloor\frac{y}{c}\rfloor+\frac{x*c}{c} \]
这些公式都可以用这个公式来证明(或者感性理解)

所以我们得到:
\[ F(a,b,c,n)=F(a\bmod c,b\bmod c,c,n)+\frac{n(n+1)}{2}\lfloor\frac{a}{c}\rfloor+(n+1)\lfloor\frac{b}{c}\rfloor \]
2.\(a<c\)且\(b<c\):

首先我们要知道:\(\lfloor a\rfloor\)实际上就是\(\leq a\)的正整数。

然后直接大力推式子:

设\(m=\lfloor\frac{a*n+b}{c} \rfloor\)
\[ \begin{align} F&=\sum_{i=0}^n\sum_{j=1}^m[\lfloor\frac{a*i+b}{c} \rfloor \geq j]\\ &=\sum_{i=0}^n\sum_{j=0}^{m-1} [\lfloor\frac{a*i+b}{c} \rfloor \geq j+1]\\ &=\sum_{i=0}^n\sum_{j=0}^{m-1}[\frac{a*i+b}{c}\geq j+1]\\ &=\sum_{j=0}^{m-1}\sum_{i=0}^{n}[i\geq \frac{j*c+c-b}{a}]\\ \end{align} \]
因为:
\[ x\geq \lfloor \frac{a}{c} \rfloor\\ \Rightarrow x>\lfloor\frac{a-1}{c}\rfloor \]
所以:
\[ \begin{align} F &=\sum_{j=0}^{m-1}\sum_{i=0}^{n}[i\geq \frac{j*c+c-b}{a}]\\ &=\sum_{j=0}^{m-1}\sum_{i=0}^{n}[i> \frac{j*c+c-b-1}{a}]\\ &=\sum_{j=0}^{m-1}n-\lfloor\frac{j*c+c-b-1}{a} \rfloor\\ &=n*m-\sum_{j=0}^{m-1}\lfloor\frac{j*c+c-b-1}{a} \rfloor \end{align} \]
于是我们又得到了:
\[ F(a,b,c,n)=n*m-F(c,c-b-1,a,m-1)\\ \]
其他几种就不会了。

上一篇:基础数论复习笔记


下一篇:【题解】LOJ#6500. 「雅礼集训 2018 Day2」操作 / tiramisu【20201030 CSP 模拟赛】