• 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}}))

  • 相关阅读:
    SAS学习笔记5 字符截取语句(index、compress、substr、scan函数)
    SAS学习笔记4 基本运算语句(lag、retain、_n_函数)
    SAS学习笔记3 输入输出格式(format、informat函数)
    SAS学习笔记2 基础函数应用
    特性与反射
    WebApi 接口返回值类型详解 ( 转 )
    C# 数据类型转化为byte数组
    关于.Net中Process和ProcessStartInfor的使用
    C#双缓冲解释
    如何获取到一个form中的所有子控件?
  • 原文地址:https://www.cnblogs.com/autoint/p/12499857.html
Copyright © 2020-2023  润新知