• 莫比乌斯反演个人小结


    莫比乌斯反演个人小结

    推荐

    1.浅谈一类积性函数的前缀和(http://blog.csdn.net/skywalkert/article/details/50500009)
    2.《贾志鹏线性筛》
    3.《炫酷反演魔术》

    这篇博客主要是学习了以上的东西的个人总结,如有错误请告知本人
    假装大家现在没有看过上面那篇博客,先介绍一下

    积性函数的定义

    1.若f(n)的定义域为正整数域,值域为复数,即(f:{Z}^{+} ightarrow C),则称f(n)为数论函数。
    2.若f(n)为数论函数,且f(1)=1,对于互质的正整数p,q有f(p⋅q)=f(p)⋅f(q),则称其为积性函数。
    3.若f(n)为积性函数,且对于任意正整数p,q都有f(p⋅q)=f(p)⋅f(q),则称其为完全积性函数。

    一些函数

    1.下面的式子中(d|n)表示d是n的因子;([command])为if,command成立为 1,否则为0;((a,b))表示a,b的gcd;(lfloor frac{n}{i} floor)表示整除
    2.除数函数({sigma} _ {k}(n)=sum _ {d|n}^{}{d}^{k}),表示n的约数的k次幂和
    3.约数个数函数( au (n)={sigma } _ {0}(n)=sum_ {d|n}^{}1),表示n的约数个数,一般也写为d(n)。
    4.约数和函数(sigma (n)={sigma } _ {1}(n)=sum_ {d|n}^{}d),表示n的约数之和。
    5.欧拉函数(varphi (n)=sum_ {i=1}^{n}[(i,n)=1]cdot 1),表示不大于n且与n互质的正整数个数

    -欧拉函数是积性函数,不是完全积性函数
    -如果将n质数分解,(n=prod_ {i=1}^{t}{{p} _ {i}}^{{k} _ {i}})
    -(varphi (n)=ncdotprod_ {i=1}^{t}(1-frac{1}{{p} _ {i}}))
    -根据以上得到(varphi(1)=1,varphi(p)=p-1,varphi({p}^{k})={p}^{k-1}cdot(p-1))
    -(varphi(n))为偶数,当n>2时
    -欧拉公式:({n}^{varphi(m)}=1quad(mod\,m)),当(n,m)=1时
    -一个公式:({n}^{x}={n}^{x\%varphi(m)+varphi(m)}quad(mod\,m)),唯一条件是(xgeqvarphi(m))

    6.莫比乌斯函数(mu(n)),在狄利克雷卷积的乘法中与恒等函数互为逆元,(mu(1)=1),对于无平方因子数(n=prod_ {i=1}^{t}{p} _ {i})(mu(n)={(-1)}^{t}),对于有平方因子数n有(mu(n)=0)
    7.元函数(e(n)=[n=1]),狄利克雷卷积的乘法单位元,完全积性。
    8.恒等函数(I(n)=1),完全积性。
    9.单位函数(id(n)=n),完全积性。
    10.幂函数({id}^{k}(n)=n^k),完全积性。

    狄利克雷卷积(Dirichlet product)

    数论函数f和g狄利克雷卷积定义为(( f ast g)(n)=sum_ {d|n}f(d)cdot g(frac {n} {d})),狄利克雷卷积满足交换律、结合律,对加法满足分配律
    1.(fast e=f)(e)是单位元
    2.(Iast mu=e)
    3.(Iast varphi=id)
    4.((idcdotvarphi)ast id=id^2)
    5.如果f和g是积性,那么(fast g)是积性的。对于(f(n)=sum_ {d|n}g(d)),只要一者积性,两者都积性。但反演式不要求f或g积性
    6.根据式2,(e)是卷积单位元,所以(I)(mu)互为逆元
    7.那么
    (g=fast Iquad gast mu=f)
    这就是莫比乌斯反演

    给出一些反演式和代码

    1.(f(n)=sum_ {d|n}g(d))
    (quad g(n)=sum_ {d|n}mu(n/d)f(d)=sum_ {d|n}mu(d)f(n/d))
    2.(f(n)=sum_ {n|d}g(d))
    (quad g(n)=sum_ {n|d}mu(d/n)f(d))
    3.(f(n)=sum_ {dgeq1}g(d))
    (quad g(n)=sum_ {dgeq1}mu(d/n)f(d))
    4.(f(n)=sum_ {k=0}^{n}C(n,k)g(k))
    (quad g(n)=sum_ {k=0}^{n}(-1)^{n+k}C(n,k)f(k))
    5.(f(n)=sum_ {k=n}^{infty}C(k,n)g(k))
    (quad g(n)=sum_ {k=n}^{infty}(-1)^{n+k}C(k,n)f(k))
    6.(f(n)=sum_ {k=0}^{n}C(n+p,k+p)g(k))
    (quad g(n)=sum_ {k=n}^{infty}(-1)^{n+k}C(n+p,k+p)f(k))
    7.(f(n)=sum_ {k=n}^{infty}C(n+p,k+p)g(k))
    (quad g(n)=sum_ {k=n}^{infty}(-1)^{n+k}C(n+p,k+p)f(k))
    8.(f(s)=sum_ {tsubseteq s}g(t))
    (quad g(s)=sum_ {tsubseteq s}(-1)^{|s|-|t|}f(t))
    9.(f(n)=sum_ {k=1}^{n}t(k)g(lfloor frac{n}{k} floor))
    (quad g(n)=sum_ {k=1}^{n}mu(k)t(k)f(lfloor frac{n}{k} floor))推广莫比乌斯,条件:f,g数论函数,t完全积性,t(1)=1

    ******************************已知f[n]=(求和d|n)g(d),求g nlogn
    for (int i = 1; i <= n; ++i)
      for (int j = i + i; j <= n; j += i)		
        f[j] -= f[i];
    
    *****************************f[n]=(求和d|n)g(d),已知g,求f
    for (int i = n; i >= 1; --i)
      for (int j = i + i; j <= n; j += i)		
        f[j] += f[i];
    
    ******************************已知f[n]=(求和n|d)g(d),求g nlogn
    for (int i = n; i >= 1; --i)
      for (int j = i + i; j <= n; j += i)		
        f[i] -= f[j];
    
    *****************************f[n]=(求和n|d)g(d),已知g,求f
    for (int i = 1; i <= n; ++i)
      for (int j = i + i; j <= n; j += i)		
        f[i] += f[j];
    **********************************
    f[s]存原来的元素,之后f[s]存子集所有元素和
    for (int i = 0; i < n; i++)
        for (int s = 0; s < (1 << n); s++)
            if (s >> i & 1)
                f[s] += f[s ^ 1 << i];
    
    
    ***************************************
    f[s]存子集所有元素和,之后f[s]存原来的元素
    
    for (int i = 0; i < n; i++)
        for (int s = 0; s < (1 << n); s++)
            if (s >> i & 1)
                f[s] -= f[s ^ 1 << i];
    ******************************************
    数论卷积nlogn	算1-n的h[x]=(求和d|x)(f[d]*g[x/d])	已知f,g的1-n
    
    int f[MAXN],g[MAXN],h[MAXN]={0};
    void calc(int n)
    {    
        for (int i=1;i*i<=n;i++)
            for (int j=i;i*j<=n;j++)
                if(j==i)h[i*j]+=f[i]*g[i];
                else h[i*j]+=f[i]*g[j]+f[j]*g[i];
    }    
    

    一些有用的式子

    1.(sum_ {i=1}^{n}{sigma} _ {k}(i)=sum_ {i=1}^{n}sum_ {d|i}d^k=sum_ {d=1}^{n}d^klfloorfrac{n}{d} floor)
    2.(sum_ {d=1}^{n}dlfloorfrac{n}{d} floor=sum_ {d=1}^{n}frac{lfloorfrac{n}{d} floor(lfloorfrac{n}{d} floor+1)}{2})
    3.([n=0]=sum_ {k=0}^{n}(-1)^k C(n,k))
    4.([n=1]=sum_ {d|n}mu(d))
    5.(n=sum_ {d|n}varphi(d))
    6.([s=emptyset]=sum_ {tsubseteq s}(-1)^{|t|})
    7.(varphi(n)=sum_ {d|n}mu(d)frac{n}{d})
    8.(frac{varphi(n)}{n}=sum_ {d|n}frac{mu(d)}{d})此式中为分数
    9.(varphi(n)=sum_ {i=1}^{n}[(n,i)=1])与n互质个数
    10.(frac{nvarphi(n)+[n=1]}{2}=sum_ {i=1}^{n}icdot[(n,i)=1])与n互质和
    11.(sum_ {d|m}varphi(d)n^{frac{m}{d}}=0quad(mod\,m))

    一些技巧

    1.我们有nlog子集求和的算法,那么我们如果想对父集求和的话怎么办呢?

    先取反赋值,那么就是子集求和了

    2.常用的分解方法
    (n=prod_ {i=1}^{t}{{p} _ {i}}^{{k} _ {i}})
    对于积性函数f存在
    (g(n)=sum_ {d|n}f(d)=prod_ {i=1}^{t}(sum_ {j=0}^{ki}f(p _ i^j)))
    如果f是完全积性函数的话还能进一步化简

    一些科技

    从上面那篇博客中得知了求积性函数求前缀和的方法,但构造那个特定的函数一般人是想不出来的。前几天突然看到了个式子:
    (h(n)=sum_ {i=1}^{n} f(i))
    $sum_ {i=1}^{n}f(i)lfloor frac{n}{i} floor=sum_ {i=1}^{n}h(lfloor frac{n}{i} floor) ( )qquadqquadquad =h(n)+sum_ {i=2}^{n}h(lfloor frac{n}{i} floor)$

    [h(n)=sum_ {i=1}^{n}f(i)lfloor frac{n}{i} floor-sum_ {i=2}^{n}h(lfloor frac{n}{i} floor) ]

    根据上式就可以轻松求得欧拉函数(varphi)和莫比乌斯函数(mu)的前缀和

    1.欧拉函数(varphi),求它的前缀和函数(Phi (n)=sum_{i=1}^{n}varphi(i))
    代入得(Phi (n)=sum_ {i=1}^{n}varphi(i)lfloor frac{n}{i} floor-sum_ {i=2}^{n}Phi(lfloor frac{n}{i} floor))
    (sum_ {i=1}^{n}varphi(i)lfloor frac{n}{i} floor=sum_ {i=1}^{n}sum_ {d|i}varphi(d)=sum_ {i=1}^{n}i=frac{n(n+1)}{2})
    所以(Phi (n)=frac{n(n+1)}{2}-sum_ {i=2}^{n}Phi(lfloor frac{n}{i} floor))
    此式可以在预处理(n^{frac{2}{3}})个数的前提下,迭代达到(O(n^{frac{2}{3}}))的复杂度

    2.同理,对于莫比乌斯函数(mu)的前缀和函数(M(n)=sum_{i=1}^{n}mu(i))
    代入得(M(n)=sum_ {i=1}^{n}mu(i)lfloor frac{n}{i} floor-sum_ {i=2}^{n}M(lfloor frac{n}{i} floor))
    (sum_ {i=1}^{n}mu(i)lfloor frac{n}{i} floor=sum_ {i=1}^{n}sum_ {d|i}mu(d)=sum_ {i=1}^{n}[i=1]=1)
    所以(M (n)=1-sum_ {i=2}^{n}M(lfloor frac{n}{i} floor))
    此式可以在预处理(n^{frac{2}{3}})个数的前提下,迭代达到(O(n^{frac{2}{3}}))的复杂度

    所以关键是化简(sum_ {i=1}^{n}f(i)lfloor frac{n}{i} floor)


    另一个式子
    (sum_ {i=1}^{n}sum_ {d|i}f(d)lfloor frac{i}{d} floor=sum_ {i=1}^{n}icdot h(lfloor frac{n}{i} floor))

    [h(n)=sum_ {i=1}^{n}sum_ {d|i}f(d)lfloor frac{i}{d} floor-sum_ {i=2}^{n}icdot h(lfloor frac{n}{i} floor) ]

    例子
    函数(f(n)=icdotvarphi(n)),求它的前缀和函数(h (n)=sum_{i=1}^{n}icdotvarphi(i))
    代入得(h(n)=sum_ {i=1}^{n}sum_ {d|i}dcdotvarphi(d)lfloor frac{i}{d} floor-sum_ {i=2}^{n}icdot h(lfloor frac{n}{i} floor))
    (sum_ {i=1}^{n}sum_ {d|i}dcdotvarphi(d)lfloor frac{i}{d} floor=sum_ {i=1}^{n}icdotsum_ {d|i}varphi(d)=sum_ {i=1}^{n}i^2=frac{n(n+1)(2n+1)}{6})
    所以(h (n)=frac{n(n+1)(2n+1)}{6}-sum_ {i=2}^{n}icdot h(lfloor frac{n}{i} floor))
    此式可以在预处理(n^{frac{2}{3}})个数的前提下,迭代达到(O(n^{frac{2}{3}}))的复杂度

  • 相关阅读:
    github替代品
    【推荐】通用全面的APP测试用例设计
    Jmeter 性能测试,完整入门篇
    2020年,有哪些特别好用的 app 测试工具?
    如何做好Web端性能测试?
    如何做Web服务的性能测试?
    Office 各版本批量授权(VOL)和激活方法
    django中引用bootstrap的几种方式
    list类型数据执行效率测试
    Linux安装python3环境
  • 原文地址:https://www.cnblogs.com/femsub/p/5723780.html
Copyright © 2020-2023  润新知