SPOJ-DivCnt2 Counting Divisors (square)

容斥理解

从容斥的角度考虑莫比乌斯反演 \(g(x)=\sum_{i|x}f(i) \leftrightarrow f(x)=\sum_{i|x}g(i)\mu(\frac{x}{i})\) 的意义。

左侧的等式的意思是 \(g(x)\) 表示所有 \(x\) 的约数的 \(f\) 的和。

右侧的等式的意思是:

  1. \(f(x)\) 有基本解 \(g(x)\mu(1)\)

  2. \(f(x)\) 为了去掉自己的约数的影响,强行枚举这些多加的约数相对 \(x\) 少了哪些质因数。

    \(x=\prod_{i=1}^{\omega}p_i^{\alpha_i}\),显然约数少一个质因数 \(p_i\) 就要多乘一个容斥系数 \(-1\)。所以 \(\mu\) 的值多一个质因数就要乘以一个 \(-1\) 的意义就解释清楚了。

    另外可以注意到少了 \(p_i^2\) 情况并不属于容斥的过程。所以 \(\mu\) 的值在有平方因子的情况下为 \(0\) 的意义就解释清楚了。

有了如上的解释,我们很容易就能得出另外一个对偶的莫比乌斯反演 \(g(x)=\sum_{x|i}f(i) \leftrightarrow f(x)=\sum_{x|i}g(i)\mu(\frac{i}{x})\) 的意义。

这两个莫比乌斯反演都可以在 \(O(n \ln n)\) 的时间内完成计算。

DivCnt2

\(\sum_{i=1}^n\sigma_0(i^2)\)

\(n \leq 10^{11}\)

题解

https://www.cnblogs.com/clrs97/p/5986557.html

\[\sigma_0(n^2)=\sum_{d|n}f(d) \]

其中

\[f(n)=\sum_{d|n}\mu^2(d) \]

容斥理解

\(f(n)\) 的意思是统计 \(n\) 有多少个约数没有平方因子。\(\sigma_0(n^2)\) 的等式的意义不明显,从容斥的角度考虑莫比乌斯反演后的式子

\[f(n)=\sum_{d|n}\sigma_0(d^2)\mu(\frac{n}{d}) \]

这个等式的意思是我们可以转而统计 \(n^2\) 有多少个约数没有平方因子:

  1. \(f(n)\) 有基本解 \(\sigma_0(n^2)\mu(1)\)

  2. \(f(n)\) 为了去掉有平方因子的约数的影响,强行枚举这些平方因子包含的平方质因子。

\(n=\prod_{i=1}^\omega p_i^{\alpha_i}\),那么通过参数 \(d^2\) 使得每次减少一个 \(p_i^2\) 就多乘上一个容斥系数 \(-1\)

组合意义理解

\(f(n)\) 的值实际上就是 \(2^{\omega}\)。那么 \(\sigma_0(n^2)\) 的等式就相当于这样一个过程:

\(\omega(n)\) 个集合 \(\{0,1,\dots,\alpha_1\},\dots,\{0,1,\dots,\alpha_{\omega}\}\),现在要从每一个集合里选一个数,选 \(0\) 的贡献为 \(1\),其余的贡献为 \(2\)。问所有选择方式的贡献的乘积之和是多少?显然答案就是 \(\prod_{i=1}^{\omega}(2\alpha_i+1)=\sigma_0(n^2)\)

\[ans=\sum_{i=1}^n\sigma_0(i^2)\\ =\sum_{i=1}^n\sum_{d|i}f(d)\\ =\sum_{i=1}^n\sum_{d|i}\sum_{k|d}\mu^2(k)\\ =\sum_{k=1}^n\mu^2(k)\sum_{d=1}^{\lfloor\frac{n}{k}\rfloor}\lfloor\frac{n}{kd}\rfloor\\ =\sum_{k=1}^n\mu^2(k)G(\lfloor\frac{n}{k}\rfloor) \]

其中

\[G(n)=\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor\\ =\sum_{i=1}^n\sigma_0(i) \]

又因为

\[\sum_{i=1}^n\mu^2(i)=\sum_{i=1}^{\sqrt{n}}\mu(i)\lfloor\frac{n}{i^2}\rfloor \]

\(\sum_{i=1}^n\mu^2(i)\) 是在统计 \(n\) 以内有多少数没有平方因子。基本解:\(\mu(1)\lfloor\frac{n}{1}\rfloor\)。容斥系数:多一个 \(p^2\) 多一个 \(-1\)

因此首先线性筛预处理出 \(n^{\frac{2}{3}}\) 内的所有答案,然后分段计算即可。时间复杂度 \(O(Tn^{\frac{2}{3}})\)

posted on 2020-03-15 20:42  autoint  阅读(132)  评论(0编辑  收藏  举报

导航