zoukankan      html  css  js  c++  java
  • 浅谈莫比乌斯反演/杜教筛/狄利克雷卷积

    定义:

    对于两个数论函数(f)(g),定义((f*g)(n)=sum_{d|n}f(d)cdot g(frac{n}{d}))

    并且我们可以发现,狄利克雷卷积是满足交换律,结合律以及分配律的。

    你或许还需要知道一些完全积性函数:

    1、(I(n))不变的函数,定义为(I(n)=1)

    2、(id(n))单位函数,定义为(id(n)=n)

    3、(ε(n))定义为:(ε(n)=[n==1])。为狄利克雷卷积的乘法单位。

    这些函数在接下来将很有用

    很显然,是不是有(mu*I=ε)

    证明莫比乌斯反演

    那么接下来我们来证明莫比乌斯反演吧:

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

    那么有

    [F=f*I ]

    想到(mu*I=ε),考虑在等式两边卷上一个$mu $

    [F*mu=f*I*mu\ F*mu=f*ε ]

    然而(f*ε=f)(可以自己想想)

    然后就得出了

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

    如果定义

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

    就可以得出莫比乌斯反演的另一种形式

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

    杜教筛

    杜教筛是一种可以快速求出积性函数前缀和的算法

    假设我们现在需要求(sum_{i=1}^{n}h[i])

    (n)高达(10^9),线性筛就做不了了

    我们设(f,g),并且(f*h=g)

    那么我们设(S[n]=sum_{i=1}^{n}h[i])

    [sum_{i=1}^{n}g(i)=sum_{i=1}^{n}sum_{d|i}f(d)h(frac{i}{d})\ sum_{i=1}^{n}g(i)=sum_{d=1}^{n}f(d)sum_{i=1}^{lfloorfrac{n}{d} floor}h(i)\ sum_{i=1}^{n}g(i)=sum_{d=1}^{n}f(d)h(lfloorfrac{n}{d} floor)\ S(n)f(1)=sum_{i=1}^{n}g(i)-sum_{d=2}^{n}f(d)S(lfloorfrac{n}{d} floor)\ S(n)=frac{sum_{i=1}^{n}g(i)-sum_{d=2}^{n}f(d)S(lfloorfrac{n}{d} floor)}{f(1)}\ ]

    (f(1))很容易知道,对于右边里的(S(lfloor frac{n}{d} floor))递归求解就好了

    但是(g,f)的选择不是固定的,需要凭经验选取

    狄利克雷卷积应用

    1、可以用来判断积性函数,积性函数和积性函数的狄利克雷卷积也是积性函数

    由于博主才疏学浅,可能讲的有些不清楚,会后续更改补充

  • 相关阅读:
    Shell中调用java时的参数
    简析echo命令在Linux系统中的使用
    设置Linux环境变量的三种方法
    nohup 后台运行,以及重定向标准输出和标准错误 &/dev/null 文件
    &命令
    linux下卸载gij的java
    在Linux下运行可执行Jar包
    jar参数运行应用时classpath的设置方法
    shell获取当前进程pid和上一个进程pid
    检查文件,如果文件不存在则创建
  • 原文地址:https://www.cnblogs.com/lcxer/p/10551641.html
Copyright © 2011-2022 走看看