• 《莫比乌斯函数求解gcd问题》


    参考自:https://www.luogu.com.cn/blog/An-Amazing-Blog/mu-bi-wu-si-fan-yan-ji-ge-ji-miao-di-dong-xi

    对于莫比乌斯函数gcd的问题:

    可以有$|gcd(i,j) = 1| = sum_{d|gcd(i,j)}^{} mu (d) ( n < m)$

    可以由莫比乌斯函数的原型推得,具体不推了,很简单的代换。

    那么就可以求解$sum_{i = 1}^{n}sum_{j = 1}^{m} |gcd(i,j) = 1|$

    我们把上面的那个公式代入,即可得$sum_{i = 1}^{n}sum_{j = 1}^{m} sum_{d | gcd(i,j)}^{}mu (d)$

    这里我们再进一步化简,显然我们可以考虑枚举d,d - [1,n]

    那么,因为gcd(i,j)要是d的倍数,那么说明i,j都是d的倍数,即可得$sum_{d = 1}^{n} sum_{d | i}^{}sum_{d | j}^{}mu (d)$

    考虑进一步化简,因为在1 ~ n内,满足是d的倍数的数只有n / i个,在1 ~ m内,满足是d的倍数的数只有m / i个。

    所以可以变换得到$sum_{d = 1}^{n}mu (d) * [frac{n}{d}] * [frac{m}{d}]$

    至此,我们可以做到O(n)的复杂度了。

    但是我们看后面的式子,很显然就是一个整除分块。

    所以我们可以去优化后面的乘积为整除分块。

    对于两个块,我们右边界取小的,保证两个块大小一致,然后两个块里的元素分别为n / L和m / L。

    即可O($sqrt{n}$)做出。

    然后前面的其实就是一个莫比乌斯函数的前缀和,可以用杜教筛O($sqrt{n}$)求出。

    这样最终可以优化到O($sqrt{n}$)来求出解。

    求解:$sum_{i = 1}^{n}sum_{j = 1}^{m}|gcd(i,j) = k|(n < m)$

    我们除去一个k得,$sum_{i = 1}^{[frac{n}{k}]}sum_{j = 1}^{[frac{m}{k}]}|gcd(i,j) = 1|(n < m)$

    那么就和上面那个递推一样了。

    求解:$sum_{i = 1}^{n}sum_{j = 1}^{m}i * j * |gcd(i,j) = k|$

    同理,除以k可得$sum_{i = 1}^{[frac{n}{k}]}sum_{j = 1}^{[frac{m}{k}]}frac{i}{k} *  frac{j}{k} * |gcd(i,j) = 1|$

    化简得$sum_{i = 1}^{[frac{n}{k}]}sum_{j = 1}^{[frac{m}{k}]}i * j * k ^{2} * |gcd(i,j) = 1|$

    再化简得$sum_{i = 1}^{[frac{n}{k}]}sum_{j = 1}^{[frac{m}{k}]}i * j * k ^{2} * sum_{d | gcd(i,j)}^{} mu (d)$

    考虑枚举d,然后因为满足d | gcd(i,j),所以直接枚举d的倍数i,j即可。

    那么就是$k ^ {2}sum_{d = 1}^{[frac{n}{k}]} mu (d)sum_{i = 1}^{[frac{n}{kd}]} sum_{j = 1}^{[frac{m}{kd}]} id * jd$

    上式中因为我们枚举的是倍数i,j,所以值应该是id和jd。

    再变形一下得$k ^ {2}sum_{d = 1}^{[frac{n}{k}]} mu (d) * d^{2} sum_{i = 1}^{[frac{n}{kd}]} i sum_{j = 1}^{[frac{m}{kd}]} j$

    观察可以发现后面两项就是等差数列求和,可以O(1)求出。

    那么对于前面的莫比乌斯函数,杜教筛筛出前缀和即可,O($sqrt{n}$)

    那么总复杂度就是O($sqrt{n}$)

    求解:$sum_{i = 1}^{n}sum_{j = 1}^{m} f(i*j)$

    定义f(i*j)为求解i * j的因子个数 

    有推论:

    $sum_{i = 1}^{n}sum_{j = 1}^{m} f(i,j) Rightarrow sum_{x | i}^{}sum_{y | j}^{} | gcd(x,y) = 1|$

    那么就是求解后面那个东西,直接把最上面的变形套入即可求解。

  • 相关阅读:
    ThreadLocal Thread ThreadLocalMap 之间的关系
    组合注解(Annotation)
    Halo 开源项目使用jsdelivr进行CDN加速.
    如何正确认知和提升自己的“格局”“视野”“高度”?
    格局如何提高?站在未来看今天。
    Cookie 的技术学习笔记
    JVM垃圾收集器与内存分配策略
    java内存区域与内存溢出异常
    JAVA中的BIO,NIO与多路复用(select,poll,epoll)
    Hexo yilia主题搭建自己的github个人博客(一)
  • 原文地址:https://www.cnblogs.com/zwjzwj/p/13817819.html
Copyright © 2020-2023  润新知