zoukankan      html  css  js  c++  java
  • 「总结」筛法2

    主要是杜教筛。

    1.DZY Loves Math IV http://hzoj.com/contest/228/problem/3
    直接推,就没什么好说的。

    [egin{aligned} ans&=sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}varphi(ij)\ &=sumlimits_{i=1}^{n}S(i,m)\ S(n,m)&=sumlimits_{i=1}^{m}varphi(ni)\ \ \ n&=\_*p^c\ g&=prod p\ gr&=n\ \ \ S(n,m)&=rsumlimits_{i=1}^{m}varphi(gi)\ &=rsumlimits_{i=1}^{m}gcd(i,g)varphi(frac{ig}{gcd(i,g)})\ frac{g}{gcd(i,g)}&perp gcd(i,g),frac{g}{gcd(i,g)}perp i\ &=rsumlimits_{i=1}^{m}varphi(i)varphi(frac{g}{gcd(i,g)})gcd(i,g)\ \ \ varphi(n)&=sumlimits_{i=1}^{n}[gcd(i,n)=1]\ &=sumlimits_{i=1}^{n}sumlimits_{d|gcd(i,n)}mu(d)\ &=sumlimits_{d|n}mu(d)frac{n}{d}\ varphi&=mu*id\ id&=varphi*I\ n&=sumlimits_{d|n}varphi(d)\ \ \ &=rsumlimits_{i=1}^{m}varphi(i)varphi(frac{g}{gcd(i,g)})sumlimits_{d|gcd(i,g)}varphi(d)\ &=rsumlimits_{i=1}^{m}varphi(i)sumlimits_{d|gcd(i,g)}varphi(frac{g}{d})\ &=rsumlimits_{d|g}varphi(frac{g}{d})sumlimits_{i=1}^{frac{m}{d}}varphi(id)\ &=rsumlimits_{d|g}varphi(frac{g}{d})S(d,frac{m}{d})\ end{aligned}]

    这样就得到递归形式了。
    其实并没有莫比乌斯反演。
    中间这一步是欧拉反演。
    杜教筛的精髓就是递归形式,而并不在于其是否是积性函数。

    2.Neko and function http://hzoj.com/contest/236/problem/4
    发现难点在于(1)的处理,考虑容斥。

    [ans=sumlimits_{i=1}^{n}f(i,K) ]

    (F(n,K,m))为恰好有(m)(1)的方案。
    (G(n,K,m))为至少有(m)(1)的方案。
    (g(n,K))为无限制有多少个(1)的方案。

    [G(n,K,m)=sumlimits_{i=m}^{K}inom{i}{m}F(n,K,i) ]

    [F(n,K,m)=sumlimits_{i=m}^{K}(-1)^{i-m}inom{i}{m}G(n,K,i) ]

    [G(n,K,m)=inom{K}{m}g(n,K-m) ]

    [egin{aligned} f(n,K)&=F(n,K,0)\ &=sumlimits_{i=0}^{K}(-1)^{i}inom{K}{i}g(n,K-i)\ &=sumlimits_{i=0}^{K}(-1)^{K-i}inom{K}{i}g(n,i)\ end{aligned}]

    现在求一下(g(n,K))
    怎么做呢?尝试做一个(dp)

    [g(n,K)=sumlimits_{d|n}g(d,K-1) ]

    用卷积来写的话就是:

    [g(K)=I*g(K-1) ]

    [g(K-1)=g(K)*mu ]

    由于每个质数之间互不干扰,所以(g)是一个积性函数。
    这样就出现了杜教筛的形式。

    [egin{aligned} S_{K-1}(n)&=sumlimits_{i=1}^{n}g(n,K-1)\ &=sumlimits_{i=1}^{n}sumlimits_{d|i}g(frac{i}{d},K)mu(d)\ &=sumlimits_{d=1}^{n}mu(d)sumlimits_{i=1}^{frac{n}{d}}g(i,K)\ &=sumlimits_{d=1}^{n}mu(d)S_K(frac{n}{d})\ S_K(n)&=S_{K-1}(n)-sumlimits_{d=2}^{n}mu(d)S_K(frac{n}{d})\ end{aligned}]

    这样就可以直接杜教筛了。

    [egin{aligned} ans&=sumlimits_{i=1}^{n}f(i,K)\ &=sumlimits_{i=1}^{n}sumlimits_{j=0}^{K}(-1)^{K-j}inom{K}{j}g(i,j)\ &=sumlimits_{j=0}^{K}(-1)^{K-j}inom{K}{j}sumlimits_{i=1}^{n}g(i,j)\ &=sumlimits_{j=0}^{K}(-1)^{K-j}inom{K}{j}S_{j}(n)\ end{aligned}]

    这个是狄立克雷卷积的直接运用。

  • 相关阅读:
    一些Docker 操作集合
    与Flash 中国特供版斗智斗勇
    Linux 电子数据取证入门
    emu8086实现两位数加法运算
    emu8086实现两位数乘法运算
    5种三栏布局的实现方式
    通用事件绑定方法
    随机产生两个数值之间的某个值
    查询字符串中某个字符出现的位置数组
    根据对象属性的属性值,对对象进行排序
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/12114875.html
Copyright © 2011-2022 走看看