zoukankan      html  css  js  c++  java
  • 莫比乌斯反演

    PoPoQQQ

    提取一些关键的东西:

    [F(n)=sum_{d|n}f(d) Rightarrow f(n)=sum_{d|n}mu (d) F({nover d}) ]

    [F(n)=sum_{n|d}f(d) Rightarrow f(n)=sum_{n|d}mu ({dover n}) F(d) ]

    [n=sum_{d|n} varphi (d) ]

    虽然莫比乌斯函数可以线性筛,但是为了写代码的速度,我们可以这样:

    mu[1] = 1;
    for (int i = 1; i <= n; i++)
      for (int j = i + i; j <= n; j += i)
        mu[j] -= mu[i];
    

    这个正确性可以由这个推出来:

    [g(i)=sum_{d|i}mu d=[i==1] ]

    就是说只有(i=1)时,(g(i)=1),否则等于(0)

    bzoj2440 中山市选2011 完全平方数

    小X喜欢的数不妨称作无平方因子数。

    我们可以先二分答案(n),然后问题变为:在([1,n])内有多少个无平方因子数。如果使用容斥原理,设(p_i)为第(i)个质数,那么答案为

    [n- sum_i frac n { {p_i}^2} + sum_i sum_{j(j eq i)} frac n {(p_i cdot p_j)^2} - ... ]

    观察到((p_icdot p_jcdot p_kcdot ...)^2)前面的系数是(mu (p_icdot p_jcdot p_kcdot ...)),所以答案为

    [sum_{i=1}^{sqrt n} mu (i) lfloor {frac n {i^2}} floor$$。 还有一个问题,二分答案的范围应该是多少呢? [维基百科](http://zh.wikipedia.org/wiki/%E7%84%A1%E5%B9%B3%E6%96%B9%E6%95%B8%E5%9B%A0%E6%95%B8%E7%9A%84%E6%95%B8)上有说明,但我们取$[1,2k]$足够了。 [bzoj2301 HAOI2011 Problem b](http://www.lydsy.com/JudgeOnline/problem.php?id=2301) ------------- [bzoj2154 Crash的数字表格](http://www.lydsy.com/JudgeOnline/problem.php?id=2154) ---------------- 两道非常经典的题目,第二道题若是多组测试数据,有$O(n)$预处理,$O(sqrt n)$回答的方法。 对于多组测试数据要简化计算的话,我们可以把变量(就是每组询问不同的量)想办法移到最外层,里面的就可以预处理。 学习到的东西 --------- $C(n,0)+C(n,2)+C(n,4)+...=C(n,1)+C(n,3)+C(n,5)+...$。 采用数学归纳法。我们可以考虑杨辉三角的第$i$行,$i=1$时显然成立。假设前$i$都成立,那么第$i$行的每一个数都对第$i+1$为的一个奇数位的数和偶数位的数贡献了一次,所以第$i+1$行也成立。 若$g(x)$是积性函数,那么$f(x) = sum_{i|x} g(x)$也是积性函数。 证明($gcd(x,y)=1$): $$f(x)f(y)=sum_{i|x} g(i) sum_{j|y} g(j)=sum_{i|x} sum_{j|y} g(i)g(j)=sum_{i|x} sum_{j|y} g(i j)]

    [f(x)f(y)=sum_{D|x y} g(i j)=f(x y) ]

    由于(gcd(x,y)=1),根据(D)的值,我们完全可以推导出(i,j)

    注意,不要写成$$f(x)f(y)=sum_{ij|x y} g(ij)=f(x y)$$,这是不对的,因为(i)有可能取到了(y)的因子,(j)取到(x)的因子。

    容易出错的地方

    一开始另(j=ik),求

    [sum_j sum_{i|j} cdots ]

    此时不要变成$$sum_j sum_{i|ik} cdots$$

    lzh 时空旅行

    威尔逊定理可知,答案为:$$sum_{(a_1,a_2,...,a_m)=p}(a_1,a_2,...,a_m)$$,其中(p)是一个质数,这里(mleq 5, a_ileq 4 imes 10^7)(1 leq a_i leq m_i)

    (F(i))(i|(a_1,a_2,...,a_m))的数量,(f(i))((a_1,a_2,...,a_m)=i)的数量,通过莫比乌斯反演得:

    [f(x)=sum_i mu (i) F(ix)=sum_i mu (i) prod_j frac {m_j} {ix} ]

    那么$$answer =sum_k p_k f(p_k)= sum_k p_k sum_i mu(i) prod_j frac {m_j} {p_ki}$$
    (p_k)是第(k)个质数。

    我们要把(m_j)移出来,所以设(D=p_ki)

    [answer=sum_D (prod_j frac {m_j} D)sum_{k,p_k|D}mu (frac D {p_k})p_k ]

    现在我们要做的是筛出函数$$G(x)=sum_{k,p_k|x}mu (frac x {p_k})p_k$$
    如果直接暴力的话是(O(mlog m))的,会超时。

    仔细分析可得:
    (y)(x)的最小质因数,分下面三种情况:

    • (y)只有一个,(G(x)=mu(frac x y)y-G(frac x y))
    • (y)有且仅有两个,(G(x)=mu(frac x y)y)
    • otherwise,(G(x)=0),这时不论(p_k)是多少,都有(mu=0)

    然后就可以了。

  • 相关阅读:
    checkedListBox的具体用法
    pi
    从1.9G到64K
    世界编程大赛第一名程序
    SQLServer中导入/导出Excel的基本方法
    Android 内存优化测试
    android,内存优化详解
    Android解决大图片内存溢出
    Android有效解决加载大图片时内存溢出的问题
    android端读取本地图片出现OutOfMemoryException
  • 原文地址:https://www.cnblogs.com/wangck/p/4517479.html
Copyright © 2011-2022 走看看