zoukankan      html  css  js  c++  java
  • 杜教筛

    …因为网页崩溃导致要重写一遍……
    首先看一道板子题:bzoj 3944 https://www.cnblogs.com/lokiii/p/8329320.html
    要求在低于线性的时间内莫比乌斯函数和欧拉函数的前缀和。因为都是积性函数,所以这里以mu为例。设 ( f(n)=sum_{d|n}mu(d) g(n)=sum_{i=1}^{n}f(i) s(n)=sum_{i=1}^{n}mu(i)) ,然后很显然对于mu (g(n)=1 ),对于phi ( g(n)=n*(n+1)/2 ),然后可以这样转化一下:

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

    [=sum_{d=1}^{n}mu(d)left lfloor frac{n}{d} ight floor ]

    [=sum_{d=1}^{n}s(left lfloor frac{n}{d} ight floor) ]

    [s(n)=g(n)-sum_{d=2}^{n}s(left lfloor frac{n}{d} ight floor) ]

    然后递归求解子问题即可。
    类似的题还有:

    51nod 1224 https://www.cnblogs.com/lokiii/p/8334589.html

    51nod 1239 https://www.cnblogs.com/lokiii/p/8333844.html

    其实是一样的但是时间卡的比较死。

    通过这些题可以发现杜教筛的套路就是把一个问题转换为几个形式相同但范围更小的问题递归求解,从而做到低于线性的复杂度。子问题的构造一般是用一个叫狄利克雷卷积的东西,不过我比较习惯瞎推,因为套路就那么几个,推起来也方便。

    以下整理一些常见的推导套路:
    1、

    [sum_{d|n}mu(d)=0(n!=1) ]

    证明:

    [sum_{i=0}^{k}C_k^i(-1)^k=(1-1)^k ]

    2、设F(n)为1到n中无平方因子数的个数

    [F(n)=sum_{i=1}^{sqrt{n}}mu(i)left lfloor frac{n}{i^2} ight floor ]

    3、设 ( f(d)=sum_{k|d}mu(k)k ),p为质数

    [f(p^k)=f(p)=1-p ]

    4、

    [sum_{d|n}mu(d)frac{n}{d}=phi(d) ]

    证明:

    [phi(n)=sum_{i=1}^{n}[gcd(i,n)==1] ]

    [=sum_{i=1}^{n}sum_{d|i,d|n}mu(d) ]

    [=sum_{d|n}mu(d)left lfloor frac{n}{d} ight floor=sum_{d|n}mu(left lfloor frac{n}{d} ight floor)d ]

    5、设 d为约数个数 ,( d(ij)=sigma_0(ij) )

    [d(ij)=sum_{p|i}sum_{q|j}[gcd(p,q)==1] ]

    例:bzoj 4176 https://www.cnblogs.com/lokiii/p/8331366.html

    6、设 d为约数个和,( d(ij)=sigma_1(ij) )

    [d(ij)=sum_{p|i}sum_{q|j}[gcd(p,q)==1]frac{pj}{q} ]

    例:51nod 1220 https://www.cnblogs.com/lokiii/p/8334216.html

    7、$$ |mu(n)|==1 $$

    [phi(nk)=sum_{d|n,d|k}phi(frac{n}{d})phi(k ) ]

    [mu(n)==0 ]

    [s(n,m)=frac{n*s(k,m)}{k} ]

    例:bzoj 3512 https://www.cnblogs.com/lokiii/p/8330148.html

    8、对于积性函数f,t为约数个数,ki为约数幂,pi为第i个约数:

    [sum_{d|n}f(d)=prod_{i=1}^{t}sum_{j=0}^{k_i}f(p_i^j) ]

    9、

    [d|ij=d|frac{d}{gcd(i,d)} ]

    10、

    [sum_{i=1}^{n}phi(i^2)=sum_{i=1}^{n}iphi(i) ]

    例:bzoj 4916 https://www.cnblogs.com/lokiii/p/8330788.html

    11、对于任意积性函数构造子问题形式。这里以mu为例,设( f(i)=mu(i)i^k ),( s(n)=sum_{i=1}^{n}f(i) ),( g(n)=sum_{i=1}{n}sum_{d|i}ikmu(d) ) ,对于mu,( g(n)=sum_{i=1}{n}ik );对于phi,( g(n)=sum_{i=1}{n}i{k+1} )

    有如下推导:

    [g(n)=sum_{i=1}^{n}sum_{d|i}i^kmu(d) ]

    [g(n)=sum_{i=1}^{n}sum_{d=1}^{i-1}[d|i]i^kmu(d)+s(n) ]

    [s(n)=g(n)-sum_{i=1}^{n}sum_{d=1}^{i-1}[d|i]i^kmu(d) ]

    [s(n)=g(n)-sum_{j=1}^{n}j^ksum_{d=1}^{left lfloor frac{n}{j} ight floor}d^kmu(d) ]

    [s(n)=g(n)-sum_{j=1}^{n}j^ks(left lfloor frac{n}{j} ight floor) ]

    例:51nod 1238 https://www.cnblogs.com/lokiii/p/8334512.html
    bzoj 4916 https://www.cnblogs.com/lokiii/p/8330788.html

    12、打表找规律可得:

    [sum_{i=1}^{n}sum_{j=1}^{i}[gcd(i,j)==1]ij=sum_{i=1}^{n}ifrac{iphi(i)+[i==1]}{2} ]

    例:51nod 1238 https://www.cnblogs.com/lokiii/p/8334512.html
    51nod 1227 https://www.cnblogs.com/lokiii/p/8327746.html

    13、设( f(n)=sum_{i=1}^{n}i )

    [sum_{i=1}^{n}f(left lfloor frac{n}{i} ight floor) ]

    [=sum_{i=1}^{n}sum_{j=1}^{left lfloor frac{n}{i} ight floor}j ]

    [=sum_{i=1}^{n}sum_{j=1}^{left lfloor frac{n}{i} ight floor}j ]

    [=sum_{j=1}^{n}jleft lfloor frac{n}{j} ight floor ]

    例:51nod 1220 https://www.cnblogs.com/lokiii/p/8334216.html

    14、

    [sum_{i=1}^{n}sum_{j=1}^{n}[gcd(i,j)==1] ]

    [2sum_{i=1}^{n}phi(i)-1 ]

    例:51nod 1237 https://www.cnblogs.com/lokiii/p/8320975.html

    时间复杂度就不介绍了 我不会啊,据说预处理前 n^{frac{2}{3}} +记忆化的部分复杂度可以达到 O(n^{frac{2}{3}}) 。

    结果这篇只有前面一点点是杜教筛其他都是套路啊

  • 相关阅读:
    HDOJ 3547 DIY Cube 解题报告
    一些经典的期望问题

    人生
    BZOJ 4341 [CF253 Printer] 解题报告
    BZOJ 4302 Buildings 解题报告
    OI 回忆录
    PyQt实现测试工具
    PyQt:eg4
    pyQt: eg3
  • 原文地址:https://www.cnblogs.com/lokiii/p/8336293.html
Copyright © 2011-2022 走看看