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}^nsigma_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}(2alpha_i+1)=sigma_0(n^2))

[ans=sum_{i=1}^nsigma_0(i^2)\ =sum_{i=1}^nsum_{d|i}f(d)\ =sum_{i=1}^nsum_{d|i}sum_{k|d}mu^2(k)\ =sum_{k=1}^nmu^2(k)sum_{d=1}^{lfloorfrac{n}{k} floor}lfloorfrac{n}{kd} floor\ =sum_{k=1}^nmu^2(k)G(lfloorfrac{n}{k} floor) ]

其中

[G(n)=sum_{i=1}^nlfloorfrac{n}{i} floor\ =sum_{i=1}^nsigma_0(i) ]

又因为

[sum_{i=1}^nmu^2(i)=sum_{i=1}^{sqrt{n}}mu(i)lfloorfrac{n}{i^2} floor ]

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

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

原文地址:https://www.cnblogs.com/autoint/p/12499857.html