题解 P3312 【[SDOI2014]数表】

数表

\[ans=\sum_{i=1}^{n}\sum_{j=1}^{m}[a\geq\sum_{d|gcd(i,j)}d]\times\sum_{d|gcd(i,j)}d \]

我们假设

\[G(n,m)=\sum_{d|gcd(n,m)}d \]

\[n \leq m \]

\[\begin{aligned} G(n,m) & = \sum_{d|gcd(n,m)}d \\ & = \sum_{d=1}^{n}d\times[d|gcd(n,m)] \\ & = \sum_{d=1}^nd\times[mn=\left\lfloor\dfrac{nm}{d^2}\right\rfloor\times d^2] \end{aligned} \]

这个思路有点难走,那我们换个思路

\[ans=(\sum_{i=1}^n\sum_{j=1}^m\sum_{d|gcd(i,j)}d)-(\sum_{i=1}^n\sum_{j=1}^m[a<\sum_{d|gcd(i,j)}d]\times\sum_{d|gcd(i,j)}d) \]

我们设前面的式子为sum(n,m),则

\[\begin{aligned} sum(n,m) & =\sum_{i=1}^n\sum_{j=1}^m\sum_{d|gcd(i,j)}d \\ & =\sum_{d=1}^nd\times \left\lfloor\dfrac{n}{d}\right\rfloor\times\left\lfloor\dfrac{m}{d}\right\rfloor \end{aligned} \]

这个可以用数论分块

然后我们发现其实后面的式子和上面没有用减法原理的式子一样,所以失败


这个时候,我们发现我们最开始枚举的东西就是除数函数!

其实我没有发现,是看题解才知道的

所以我们可以写出sum(n,m)的另一个版本

\[\begin{aligned} sum(n,m) & = \sum_{i=1}^n\sum_{j=1}^m\sigma(gcd(i,j)) \\ & = \sum_{t=1}^{n}\sigma(t)\sum_{i=1}^{\left\lfloor\dfrac{n}{t}\right\rfloor}\sum_{j=1}^{\left\lfloor\dfrac{m}{t}\right\rfloor}[gcd(i,j)=1] \\ & = \sum_{t=1}^{n}\sigma(t)\sum_{i=1}^{\left\lfloor\dfrac{n}{t}\right\rfloor}\sum_{j=1}^{\left\lfloor\dfrac{m}{t}\right\rfloor}\sum_{d|gcd(i,j)}\mu(d) \\ & = \sum_{t=1}^{n}\sigma(t)\sum_{d=1}^{\left\lfloor\dfrac{n}{t}\right\rfloor}\mu(d)\left\lfloor\dfrac{n}{dt}\right\rfloor\left\lfloor\dfrac{m}{dt}\right\rfloor \\ & =\sum_{T=1}^{n}\left\lfloor\dfrac{n}{T}\right\rfloor\left\lfloor\dfrac{m}{T}\right\rfloor\sum_{d|T}\sigma(d)\mu(\frac{T}{d}) \end{aligned} \]

此时,前面的求和可以分块\(O(n + m)\),后面的是个积性函数,可以预处理,然后就是O(1)

但是,不是每个东西都对答案有贡献,所以我们要排除掉没有贡献的.

然后就需要维护答案,想到维护这个词,在看一下式子,

\[\text{单点修改,区间查询} \]

这不就是树状数组吗?

我们可以维护一个树状数组来存储合法的点,然后取出进行统计就可以了

posted @ 2020-08-25 16:08  starseven  阅读(88)  评论(0编辑  收藏  举报