zoukankan      html  css  js  c++  java
  • 莫比乌斯反演

    莫比乌斯反演

    前言

    本文章中所有出现的 ([n=1]) 表示只有 (n=1)时, ([n=1])(1) ,否则为 (0)

    (n perp m) 表示 (n)(m) 互质。

    狄利克雷卷积

    引出:

    我们都知道卷积的算式:

    (C(n)= sumlimits_{i oplus j = n} A(i) imes B(j))

    如果 “ $ oplus $ ”为加号,就是加法卷积,我们可以用 $ FFT$, (NTT) 等算法来快速实现加法卷积。

    那么现在我们令“ $ oplus $ ”为乘号,它就成了乘法卷积。

    (C(n)= sumlimits_{i imes j = n} A(i) imes B(j))

    (Leftrightarrow C(n)= sumlimits_{imid n} A(i) imes B( frac{n}{i}))

    上面这个就是狄利克雷卷积。

    我们一般简写成: (C= A * B),“(*)”代表以上的运算。

    它满足交换律:(A * B = B * A)

    结合律:((A * B) * C = A * (B * C))

    分配律:((A + B) * C = A * C + B * C)

    单位元:

    我们有一个叫单位元的东西,单位元叫 (epsilon)

    对于任意一个数论函数 (f) , 都有 (epsilon * f = f)

    而单位元的求法为 (epsilon(n)=[n=1]= egin{cases}1quad n=1\0quad n>1end{cases})

    逆元:

    每一个数论函数都存在它的逆元。

    现在有两个数论函数 (f)(g)(g)(f) 的逆元,则有:(f*g=epsilon)

    求一个函数的逆:(g(n)= frac{1}{f(1)}left([n=1]-sumlimits_{imid n,i e1}f(i)g( frac{n}{i}) ight))

    积性函数:

    积性函数:当(n perp m)时:

    (f(n imes m)=f(n) imes f(m))

    常见积性函数:(id)(mu)(phi)(sigma)

    $ id(n)$ 函数就是返回自己,比如 (id(3)=3)

    (sigma_0(n)) 函数就是求 (n) 的因数个数。

    (phi(n)) 函数就是求与 (n) 互质的个数。

    为什么要这么强调积性函数呢?因为这种函数可以通过线性筛来快速求解得到。

    莫比乌斯反演:

    我们定义 (1) 的逆为 (mu)

    定义:(1 * mu = epsilon)

    (1) 的逆元为 (mu)

    设一个函数 (f)(f(n)=1)

    (epsilon(n)=[n=1]=sumlimits_{dmid n}mu(d) imes f( frac{n}{d})=sumlimits_{dmid n}mu(d) imes 1=sumlimits_{dmid n}mu(d))

    现在有两个数论函数 (f)(g) ,满足 (f * 1 = g) ,那么有 (g * mu = f)

    则有: (f(n) = sumlimits_{i mid n} g(i) imes mu( frac{n}{i})) 。(莫比乌斯反演结论)

    (mu) 的值:

    (mu(n) = egin{cases} (-1)^{t}quad n = p_1p_2p_3...p_t且p_i互不相同。\ 0quad n不符合上述条件。end{cases})

    例题

    例一

    求:(sumlimits_{i=1}^nsumlimits_{j=1}^m[gcd(i,j)=1]quad(n<m))

    (Leftrightarrowsumlimits_{i=1}^nsumlimits_{j=1}^msumlimits_{dmid gcd(i,j)}mu(d))

    因为 (d mid gcd(i,j)) 所以 (dmid i)(dmid j) ,因此 (i)(j) 必须得是 (d) 的倍数,然后把 (d) 提前。

    得:

    (Leftrightarrow sumlimits_{d=1}^nmu(d) imes leftlfloor frac{n}{d} ight floor imes leftlfloor frac{m}{d} ight floor)

    首先 (mu) 可以用线性筛求出,然后式子前面一部分可以用前缀和实现,可以用后面一部分可以通过分块思想实现。

    时间复杂度:(O(n))

    例二

    求:(sumlimits_{i=1}^n sumlimits_{j=1}^m [gcd(i,j)=k])

    我们发现与例一相比,例二的 (gcd(i,j)) 的数不再是 (1) ,但是如果满足 (gcd(i,j)=k) 的话,必有 (k mid i) 且 $ k mid j$ ,那么我们可以让他们同除 (k) ,得到例一的式子。

    (sumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{m}{k} ight floor} [gcd(i,j)=1])

    (sumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{m}{k} ight floor} sumlimits_{d mid gcd(i,j)}mu(d))

    (sumlimits_{d=1}^{leftlfloor frac{n}{k} ight floor}mu(d) imes {leftlfloor frac{n}{kd} ight floor} imes {leftlfloor frac{m}{kd} ight floor})

    例三

    求:(sumlimits_{i=1}^nsumlimits_{j=1}^m[gcd(i,j)为素数])

    例三我们现在的 $ gcd(i,j)$ 要求是为素数,我们可以枚举 (k) ,这样问题就转化成了例二。

    (Leftrightarrow sumlimits_{k=1}^nsumlimits_{i=1}^nsumlimits_{j=1}^m[gcd(i,j)=k]quad k为素数)

    (Leftrightarrow sumlimits_{k=1}^nsumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor}sumlimits_{j=1}^{leftlfloor frac{m}{k} ight floor}[gcd(i,j)=1]quad k为素数)

    (Leftrightarrow sumlimits_{k=1}^nsumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor}sumlimits_{j=1}^{leftlfloor frac{m}{k} ight floor}sumlimits_{dmid gcd(i,j)}mu(d)quad k为素数)

    (Leftrightarrowsumlimits_{k=1}^nsumlimits_{d=1}^leftlfloor frac{n}{k} ight floormu(d) imes sumlimits_{i=1}^leftlfloor frac{n}{k} ight floorsumlimits_{j=1}^leftlfloor frac{m}{k} ight floor[dmid i][dmid j]quad k为素数)

    (Leftrightarrow sumlimits_{k=1}^nsumlimits_{d=1}^leftlfloor frac{n}{k} ight floormu(d) imes leftlfloor frac{n}{kd} ight floor imes leftlfloor frac{m}{kd} ight floorquad k为素数)

    如果你觉得这样子就是最简了,直接就枚举(k),感觉可以,但是会超时。所以我们要继续对这个式子进行优化。我们设 (T=kd) ,得:

    (Leftrightarrow sumlimits_{k=1}^n sumlimits_{dk=1}^n mu(d) imes leftlfloor frac{n}{kd} ight floor imes leftlfloor frac{m}{kd} ight floorquad k为素数)

    (Leftrightarrow sumlimits_{T=1}^n sumlimits_{dmid T}mu( frac{T}{d}) imes leftlfloor frac{n}{T} ight floor imes leftlfloor frac{m}{T} ight floor quad d为素数)

    然后 (sumlimits_{d mid T} mu( frac{T}{d})) 也可以在线性筛中求解,只要枚举每一个素数,然后把所有可以整除它的都加上就行了。

    例四

    (sumlimits_{i=1}^n sumlimits_{j=1}^n i imes j imes gcd(i,j))

    老套路,我们枚举 (k)

    (sumlimits_{k=1}^nsumlimits_{i=1}^n sumlimits_{j=1}^n i imes j imes k imes [gcd(i,j)=k])

    这次同除 (k) 就要注意了,由于我们除 (k) 之后, (i)(j) 都变小了,所以我们必须再乘回来。

    (sumlimits_{k=1}^nsumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{n}{k} ight floor} i imes j imes k^3 imes [gcd(i,j)=1])

    (sumlimits_{k=1}^nsumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{n}{k} ight floor} i imes j imes k^3 imes sumlimits_{dmid gcd(i,j)}mu(d))

    (sumlimits_{k=1}^n sumlimits_{d=1}^{leftlfloor frac{n}{k} ight floor}mu(d) imes sumlimits_{i=1}^{leftlfloor frac{n}{kd} ight floor} sumlimits_{j=1}^{leftlfloor frac{n}{kd} ight floor} i imes j imes k^3 imes d^2)

    (sumlimits_{k=1}^n k^3 imes sumlimits_{d=1}^{leftlfloor frac{n}{k} ight floor}mu(d) imes d^2 imes sumlimits_{i=1}^{leftlfloor frac{n}{kd} ight floor} sumlimits_{j=1}^{leftlfloor frac{n}{kd} ight floor} i imes j)

    (T = kd)

    (sumlimits_{T=1}^n sumlimits_{dmid T}mu( frac{T}{d}) imes d imes T^2 imes sumlimits_{i=1}^{leftlfloor frac{n}{T} ight floor}i sumlimits_{j=1}^{leftlfloor frac{n}{T} ight floor}j)

    (sumlimits_{T=1}^n T^2 imes sumlimits_{dmid T}mu( frac{T}{d}) imes d imes left( sumlimits_{i=1}^{leftlfloor frac{n}{T} ight floor}i ight)^2)

    因为我们有 (id * mu = phi) ,所以 $phi(n) = sumlimits_{imid n}mu( frac{n}{i}) imes i $ 。

    (sumlimits_{T=1}^n T^2 imes sumlimits_{dmid T}phi(d) imes left( sumlimits_{i=1}^{leftlfloor frac{n}{T} ight floor}i ight)^2)

    (phi) 函数可以用线性筛求解,后面的可以用求和公式算出。

    例五

    求:(sumlimits_{i1=L}^Rsumlimits_{i2=L}^R...sumlimits_{in=L}^R[gcd(i1,i2...in)=K])

    按照之前的套路。

    (sumlimits_{i1=leftlfloor frac{L-1}{K} ight floor+1}^{leftlfloor frac{R}{K} ight floor}sumlimits_{i2=leftlfloor frac{L-1}{K} ight floor+1}^{leftlfloor frac{R}{K} ight floor}...sumlimits_{in=leftlfloor frac{L-1}{K} ight floor+1}^{leftlfloor frac{R}{K} ight floor}[gcd(i1,i2...in)=1])

    (sumlimits_{i1=leftlfloor frac{L-1}{K} ight floor+1}^{leftlfloor frac{R}{K} ight floor}sumlimits_{i2=leftlfloor frac{L-1}{K} ight floor+1}^{leftlfloor frac{R}{K} ight floor}...sumlimits_{in=leftlfloor frac{L-1}{K} ight floor+1}^{leftlfloor frac{R}{K} ight floor}sumlimits_{dmid gcd(i1,i2...in)}mu(d))

    (sumlimits_{d=1}^{leftlfloor frac{R}{K} ight floor}mu(d) imes leftlfloor frac{leftlfloor frac{R}{K} ight floor-leftlfloor frac{L-1}{K} ight floor-1}{d} ight floor^n)

    (Y=leftlfloor frac{R}{K} ight floor)(X = leftlfloor frac{L-1}{K} ight floor + 1)

    (sumlimits_{d=1}^{leftlfloor frac{R}{K} ight floor}mu(d) imes leftlfloor frac{Y - X}{d} ight floor^n)

    例六

    (sumlimits_{i=1}^n sumlimits_{j=1}^m sigma_1(gcd(i,j)))

    我们可以通过枚举 (k)(gcd(i,j)) 转到外面。

    (sumlimits_{k=1}^n sumlimits_{i=1}^n sumlimits_{j=1}^m sigma_1(k) imes [gcd(i,j)=k])

    (sumlimits_{k=1}^n sumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{m}{k} ight floor} sigma_1(k) imes [gcd(i,j)=1])

    (sumlimits_{k=1}^n sumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{m}{k} ight floor} sigma_1(k) imes sumlimits_{dmid gcd(i,j)}mu(d))

    (sumlimits_{k=1}^n sigma_1(k) imes sumlimits_{d=1}^{leftlfloor frac{n}{k} ight floor}mu(d) imes leftlfloor frac{n}{kd} ight floor imes leftlfloor frac{m}{kd} ight floor)

    (T=kd)

    (sumlimits_{T=1}^{n} leftlfloor frac{n}{T} ight floor imes leftlfloor frac{m}{T} ight floor imes sumlimits_{dmid T}sigma_1(d) imes mu(leftlfloor frac{T}{d} ight floor))

    (sigma_1(n)) 表示 (n) 所有的因数之和,是积性函数。

    例七

    (sumlimits_{i=1}^n sumlimits_{j=1}^n gcd(A_i,A_j))

    乍一看,我们发现我们对 (Ai)(Aj) 无从下手,我们希望把 (gcd) 里面的东西变成我们可以控制的。我们可以用 (B) 来统计 (A) 出现的次数, (MAXA) 表示 (A) 中最大的数的值,这样一来, (gcd) 里面的东西就是我们可以控制的 (i)(j) 了。

    (sumlimits_{i=1}^{MAXA} sumlimits_{j=1}^{MAXA} gcd(i,j) imes B_i imes B_j)

    (sumlimits_{k=1}^{MAXA} sumlimits_{i=1}^{MAXA} sumlimits_{j=1}^{MAXA} [gcd(i,j)=k] imes B_i imes B_j)

    (sumlimits_{k=1}^{MAXA} sumlimits_{i=1}^{leftlfloor frac{MAXA}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{MAXA}{k} ight floor} [gcd(i,j)=1] imes B_{ik} imes B_{jk})

    (sumlimits_{k=1}^{MAXA} sumlimits_{i=1}^{leftlfloor frac{MAXA}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{MAXA}{k} ight floor} sumlimits_{dmid gcd(i,j)}mu(d) imes B_{ik} imes B_{jk})

    (sumlimits_{k=1}^{MAXA} sumlimits_{d=1}^{leftlfloor frac{MAXA}{k} ight floor} mu(d) imes sumlimits_{i=1}^{leftlfloor frac{MAXA}{kd} ight floor} sumlimits_{j=1}^{leftlfloor frac{MAXA}{kd} ight floor} B_{ikd} imes B_{jkd})

    (T=kd)

    (sumlimits_{k=1}^{MAXA} sumlimits_{dk=1}^{MAXA} mu(d) imes sumlimits_{i=1}^{leftlfloor frac{MAXA}{kd} ight floor} sumlimits_{j=1}^{leftlfloor frac{MAXA}{kd} ight floor} B_{ikd} imes B_{jkd})

    (sumlimits_{T = 1}^{MAXA} sumlimits_{d mid T} mu(d) imes sumlimits_{i=1}^{leftlfloor frac{MAXA}{T} ight floor} sumlimits_{j=1}^{leftlfloor frac{MAXA}{T} ight floor} B_{iT} imes B_{jT})

    (sumlimits_{T = 1}^{MAXA} sumlimits_{d mid T} mu(d) imes left( sumlimits_{i=1}^{leftlfloor frac{MAXA}{T} ight floor} B_{iT} ight)^2)

  • 相关阅读:
    mssql索引视图无法对视图创建 索引,因为该视图未绑定到架构
    说说回车键触发表单提交的问题
    在C#中使用SqlDbType.Xml类型参数
    使用nginx实施负载均衡
    SQL Server 索引中include的魅力(具有包含性列的索引)
    群发“站内信”的实现
    ORM映射框架总结终极JSON
    51 地图基本接口(二)
    通用短信平台接口
    ORM映射框架总结Flash 处理
  • 原文地址:https://www.cnblogs.com/eromangasensei/p/13041300.html
Copyright © 2011-2022 走看看