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、可以用来判断积性函数,积性函数和积性函数的狄利克雷卷积也是积性函数

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

  • 相关阅读:
    219. Contains Duplicate II
    189. Rotate Array
    169. Majority Element
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    119. Pascal's Triangle II
    118. Pascal's Triangle
    88. Merge Sorted Array
    53. Maximum Subarray
    CodeForces 359D Pair of Numbers (暴力)
  • 原文地址:https://www.cnblogs.com/lcxer/p/10551641.html
Copyright © 2011-2022 走看看