题解 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{单点修改,区间查询}
\]
这不就是树状数组吗?
我们可以维护一个树状数组来存储合法的点,然后取出进行统计就可以了