狄利克雷卷积&莫比乌斯反演

狄利克雷卷积

定义:如果函数 \(F,f,g\) 满足:

\(F(n)=\sum\limits_{d|n}f(d)g(\frac{n}{d})\)

\(F\)\(f\)\(g\) 的狄利克雷卷积,记作 \(F=(f∗g)\),或 \(F(n)=(f∗g)(n)\)

显然,狄利克雷卷积满足交换律和分配律。

常见的完全积性函数

1.常函数 \(I(n)=1\)

2.恒等函数 \(id(n)=n\)

3.单位函数 \(\varepsilon(n)=[n=1]\) 又叫单位元

性质1:

  • \(f∗ε=f\) (任何函数*单位元=本身)

  • 证明:

    \((f∗ε)(n)=\sum \limits_{d|n} f(d)ε(\frac{n}{d})\)

    所以当且仅当 \(\varepsilon(\frac{n}{d})=1\) 时,后面式子不为 \(0\) ,即 \(d=n\) 时,所以 \((f*\varepsilon)(n)=f(n)\)

性质2:

  • \(μ∗I=ε\)\(\sum\limits_{d|n} \mu(d) = [n==1]\)

  • 证明:

    \(n=1\) 时,\(\mu(1)=\varepsilon(1)=1\)

    需要证明的是当 \(n>1\) 时,\(\sum\limits_{d|n} \mu(d) =0\)

    首先将 \(n\) 进行质因数分解,即 \(n=p_1^{a_1}*p_2^{a_2}....*p_n^{a^n}\)

    因为当且仅当 \(n\) 中质因数的幂次都为 \(1\) 时,\(\mu(n)\) 才有值,所以我们不妨直接将指数去掉变为 \(n=p_1*p_2...p_n\) ,此时问题就变为了在 \(n\) 个质数中选 \(k\) 个的方案数再*上对应的权值,用式子表示出来就是:

    \[\sum\limits_{d|n} \mu(d)=\sum\limits_{k=0}^{n} C_n^k (-1)^k=\sum\limits_{k=0}^n C_n^k(-1)^k(1^{n-k}) \]

    因为二项式定理:

    \[(a+b)^n=\sum\limits_{k=0}^n C_n^k a^k b^{n-k} \]

    所以

    \[\sum\limits_{k=0}^n C_n^k(-1)^k(1^{n-k})=((-1)+1)^n=0 \]

性质3:

  • \(\varphi*I=id\)\(\sum\limits_{d|n} \varphi(d)=n\)

  • 证明:

    \[n=\sum\limits_{i|n}\sum\limits_{j=1}^n [gcd(j,n)=i] \\ =\sum\limits_{i|n}\sum\limits_{j=1}^{\frac{n}{i}}[\gcd(j,\frac{n}{i})=1] \\ =\sum\limits_{i|n}\varphi(\frac{n}{i})=\sum\limits_{i|n}\varphi(i) \]

    第一步转化是等价于将 \(n\) 个数按照 \(\gcd\) 分类,个数和为 \(n\) 。第二步是因为 \(\gcd(kx,ky)=k\),所以 \(\gcd(x,y)\) 于是可以把这个 \(k\) 除出去。

性质4:

\(\mu*id=\varphi\)\(\varphi(n)=\sum\limits_{d|n} \mu(d)*(n/d)\)

其实这个直接用卷积代换就可以证明了:

  • 证明:

    由之前的性质可以知道:\(\mu*I=\varepsilon , \ \ id=\varphi*I\)

    所以可以推出:\(\mu*id=\mu*\varphi*I=(\mu*I)*\varphi=\varepsilon*\varphi=\varphi\)

性质5:

\(d=I*I\)

  • 证明:

    直接定义拆开:\(d(n)=\sum\limits_{d|n} 1\)

    就是约数的定义了呀。

性质6

\(\sigma=I*id\)

  • 证明

    老定义证明了。。\(\sigma(n)=\sum\limits_{d|n} 1*id(d)\)

    显然。

性质7

\(\mu*d=I\)

还是直接卷积代换吧:

  • 证明:

    \(d=I*I\)

    \(\mu*d=\mu*I*I=(\mu*I)*I=\varepsilon*I=I\)

    上面的证明大部分都是照着这位大佬的博客打的,如果讲的不清楚可以看一看,写的很好!

上面性质的汇总:

\(d=I*I\)

\(\sigma=I*id\)

\(\mu*id=\varphi\)

\(\varphi*I=id\)

\(μ∗I=ε\)

\(f∗ε=f\)

莫比乌斯反演

WJX的整除分块小总结

听过许多次也考了好几次了,被教练叫过来学了。

首先一切的一切,得从莫比乌斯函数讲起:

定义函数 \(\mu(x)\) (莫比乌斯函数)。

\(\mu(x)\) 只有 \(3\) 种取值,\(-1,0,1\) 分别表示:

\(-1\) : \(x\) 的质因子的最高幂次为 \(1\) ,并且有奇数个质因子。

\(0\) : \(x\) 的质因子的最高幂次 \(\geq1\)

\(1\) : \(x\) 的质因子的最高幂次为 \(1\) ,并且有偶数个质因子。

简单来说就是:当 \(x\) 的质因子最高幂次为 \(1\) 时,\(\mu(x)=(-1)^k\)\(k\) 表示质因子个数。

否则 \(\mu(x)=0\)

并且规定 \(\mu(1)=1\)

关于容斥系数:

其实如果你懂欧拉函数(\(\phi(x)\))容斥的推导过程:

即:\(\varphi(n) = n(1-\frac{1}{p_1}-\frac{1}{p_2}-\cdots+\frac{1}{p_1p_2}+\frac{1}{p_1p_3}+···+\frac{1}{p_{m-2}p_{m-1}}-\frac{1}{p_1p_2p_3}-···)\)

你会发现:当分母有奇数个质数的时候,前面的符号为 \(-\) ,偶数个质数的时候,符号为 \(+\) 。(虽然刚刚好与莫比乌斯函数的取值相反)

但是你也可以大概懂得为什么莫比乌斯函数被叫做容斥系数,许多时候计算关于因数的一些东西的时候,莫比乌斯函数就可以让容斥变得简单许多。

莫比乌斯函数的一些小性质:

借用别的大佬的一段话:

首先,我们可以先明确一点,莫比乌斯函数并不是什么很高大上的东西,它其实只是一个由容斥系数所构成的函数。

1. 是个积性函数

这一点感性理解就好了,也是 \(\mu(x)\) 可以线性筛 \(\Theta(n)\) 求的基础。

2.联系欧拉函数

对于任意的正整数 \(n\)\(\sum\limits_{d|n} \frac{\mu(d)}{d}=\frac{\varphi(n)}{n}\)

很常用的一个性质

对于任意的正整数 \(n\)\(\sum\limits_{d|n} \mu(d) = [n==1]\) 这个下面的许多推导都会用到。证明见狄利克雷卷积性质 2。

线性筛莫比乌斯函数:

直接给出代码好了,毕竟挺好理解的。

inline void Init_mu(int lim){
    mu[1]=1;
    for(register int i=2;i<=lim;++i){
        if(!isprime[i]) prime[++tot]=i,mu[i]=-1;
        for(register int j=1;j<=tot&&prime[j]*i<=lim;++j){
            isprime[i*prime[j]]=true;
            if(i%prime[j]==0)   break;
            else mu[i*prime[j]]=-mu[i];
        }
    }
    return;
}

莫比乌斯反演

  • 定义两个函数 \(g(n)\)\(f(n)\)

    莫比乌斯反演的因数形式

  • 莫比乌斯反演定理:对于这两个定义在非负整数几何上的两个函数并且满足:

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

    则:

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

  • 证明:(先展示不用卷积的证明方法)

1.将 \(f(n)\) 拆开

\[\sum_{d|n}\mu(d) g(\frac{n}{d})=\sum_{d|n}\mu(d) \sum_{k|\frac{n}{d}} f(k) \]

2.因为 \(d\)\(\frac{n}{d}\) 是成对出现的,这个式子还可以变为:

\[\sum_{k|n} f(k)\sum_ {d|\frac{n}{k}} \mu(d) \]

3.因为上面 \(\sum_{d|n} \mu(d) = [n==1]\) 所以当且仅当\(\frac{n}{k}==1\) 时,才会用值,即\(k==n\) 时,所以

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

最后给出整个过程:

\[\sum_{d|n}\mu(d) g(\frac{n}{d})=\sum_{d|n}\mu(d) \sum_{k|\frac{n}{d}} f(k)=\sum_{k|n} f(k)\sum_ {d|\frac{n}{k}} \mu(d)=f(n) \]

当然还可以用狄利克雷卷积更轻松地证明:

  • 证明:

    给出的条件即 \(g=I*f\)

    证明的为 \(f=\mu*g\)

    因为 \(f*\varepsilon=f=\mu*g\)

    又因为 \(\mu*I=\varepsilon\)

    所以 \(f*\mu*I=\mu*g\)

    同时消去 \(\mu\)\(f*I=g\)

另外一种形式(莫比乌斯反演的倍数形式):

  • 还是两个函数 \(g(n)\)\(f(n)\)

如果

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

简单说就是倍数之和。

则:

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

下面是照搬 OIwiki 上面的证明:

\[\begin{aligned} &\sum_{n|d}{\mu(\frac{d}{n})f(d)} \\ =& \sum_{k=1}^{+\infty}{\mu(k)f(kn)} = \sum_{k=1}^{+\infty}{\mu(k)\sum_{kn|d}{g(d)}} \\ =& \sum_{n|d}{g(d)\sum_{k|\frac{d}{n}}{\mu(k)}} = \sum_{n|d}{g(d)\epsilon(\frac{d}{n})} \\ =& g(n) \end{aligned} \]


做的一些题目:

「雅礼day2」最大公约数gcd

题目大意:

\(n\) 个正整数 \(x_1…x_n\) ,初始时状态均为未选。有 \(m\) 个操作,每个操作给定一个编号 \(i\) ,将\(x_i\) 的选取状态取反。每次操作后,你需要求出选取的数中有多少个互质的无序数对。\(n \leq 10^5 \ \ m\leq 10^5 \ \ x_i\leq10^5\)

做题的初始思路:

每次求完因数过后的 bitset 求并,但是这样的复杂度肯定是爆炸的。

所以我们只考虑每次插入和删除所带来的贡献:

所以设插入的元素为 \(t\) ,每次带来的贡献就是下式:

\[\begin{aligned} & \sum\limits_{i=1}^{n} [\gcd(x_i,t)==1] \\ & =\sum_{i=1}^n \sum\limits_{d|t \ d|x_i} \mu(d) \\ & = \sum\limits_{d|t} \sum\limits_{i=1}^n \mu(d) [\ x_i|t \ ] \end{aligned} \]

察觉到,后面的Sigma实质上就是有当前因子 \(d\)\(a_i\) 的个数,所以每次维护一个因数的集合大小就可以了。

Code


P2257 YY的GCD

P2257 YY的GCD

神犇 YY 虐完数论后给傻× kAc 出了一题
给定 \(N, M\),求 \(1 \leq x \leq N\)\(1 \leq y \leq M\)\(\gcd(x, y)\) 为质数的 \((x, y)\) 有多少对。

直接开始推式子:

题目要求的式子:

\[\sum\limits_{i=1}^n \sum\limits_{j=1}^m\sum [\gcd(i,j)\in prime] \]

\(g(d)\)\(\gcd(i,j)=d\) 的个数,\(f(d)\)\(\gcd(i,j)=d\)\(d\) 的倍数的个数,用式子表示以下就是:

\[g(d)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m} [\gcd(i,j)==d] \\ f(d)=\sum\limits_{d|n} g(n)=\lfloor\frac{N}{d}\rfloor\lfloor\frac{M}{d}\rfloor \]

这个式子就是上面莫比乌斯反演的另一种形式,于是:

\[g(n)=\sum\limits_{n|d} \mu(\frac{d}{n}) f(d) \]

答案要求的式子可以变成:

\[\sum\limits_{p\in prime} g(p)=\sum\limits_{p\in prime} \sum \limits_{p|d} \mu(\frac{d}{p}) f(d)=\sum\limits_{p\in prime}\sum\limits_{p|d}\mu(\frac{d}{p})\lfloor\frac{N}{d}\rfloor\lfloor\frac{M}{d}\rfloor \]

换一种形式表达上面的式子,也就是枚举倍数再看质因数:

\[\sum\limits_{d=1}^{\min(n,m)}\sum\limits_{p|d \ p\in prime} \mu (\frac{d}{p}) \lfloor\frac{N}{d}\rfloor\lfloor\frac{M}{d}\rfloor=\sum\limits_{d=1}^{\min(n,m)}\lfloor\frac{N}{d}\rfloor\lfloor\frac{M}{d}\rfloor\sum\limits_{p|d \ p\in prime} \mu (\frac{d}{p}) \]

后面的Sigma可以先线性筛处理 \(\mu(i)\) 然后 \(\Theta(n\log\log n)\) 处理和得出(类似埃氏筛)。然后合在一起的Sigma前半部分整除分块后半部分前缀和统计就好了。

Code

P6810 「MCOI-02」Convex Hull 凸包

计算 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^m d(i)*d(j)*d(\gcd(i,j))\)

首先经典的将枚举的换为 \(\gcd\) ,式子就变为:

\[\sum\limits_{d=1}^{\min(n,m)}d(d)\sum\limits_{i=1}^n\sum\limits_{j=1}^{m} d(i) \ d(j)\ [\gcd(i,j)==d] \]

再将 \(d\) 除出去。

\[\sum\limits_{d=1}^{\min(n,m)}d(d)\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor} d(id) \ d(jd)\ [\gcd(i,j)==1] \]

然后将 \([\gcd(i,j)]\) 代换掉。

\[\sum\limits_{d=1}^{\min(n,m)}d(d)\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor} d(id) \ d(jd) \sum\limits_{t|{\gcd(i,j)}} \mu(t) \]

然后再交换枚举顺序,先枚举 \(t\)

\[\sum\limits_{d=1}^{\min(n,m)}d(d)\sum\limits_{t=1}^{\min(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor)}\mu(t)\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor} d(id) \ d(jd) [t|\gcd(i,j)] \]

右边可以再除一个 \(t\)

\[\sum\limits_{d=1}^{\min(n,m)}d(d)\sum\limits_{t=1}^{\min(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor)}\mu(t)\sum\limits_{i=1}^{\lfloor\frac{n}{dt}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{dt}\rfloor} d(idt) \ d(jdt) \]

不妨将 \(dt\) 换成 \(x\)

\[\sum\limits_{d=1}^{\min(n,m)}d(d)\sum\limits_{d|x}^{min(n,m)}\mu(\frac{x}{d})\sum\limits_{i=1}^{\lfloor\frac{n}{x}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{x}\rfloor} d(ix) \ d(jx) \]

可以把 \(d(d)\) 丢进下一个Sigma,在变为枚举 \(x\)

\[\sum\limits_{x=1}^{\min(n,m)}\sum\limits_{d|x}^{min(n,m)} d(d)\mu(\frac{x}{d})\sum\limits_{i=1}^{\lfloor\frac{n}{x}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{x}\rfloor} d(ix) \ d(jx) \]

因为 \(d*\mu=I\) (这点可以见上面的性质 \(7\))

所以整个式子直接变为:

\[\sum\limits_{x=1}^{\min(n,m)}\sum\limits_{i=1}^{\lfloor\frac{n}{x}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{x}\rfloor} d(ix) \ d(jx) \]

后面的两个式子可以在线性筛因子个数后 \(\Theta(n)\) 求出。

Code

P1829 [国家集训队]Crash的数字表格 / JZPTAB

计算 \(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m} {lcm(i,j)}\)

解释见下文,先直接写式子:

\[\begin{aligned} &=\sum\limits_{i=1}^n\sum\limits_{j=1}^m \frac{i*j}{\gcd(i,j)} \ \ \ \ \ ① \\ &=\sum\limits_{d=1}^{\min(n,m)} \sum\limits_{i=1}^n \sum\limits_{j=1}^m [\gcd(i,j)==d] \frac{i*j}{d} \ \ \ \ \ ② \\ &=\sum\limits_{d=1}^{\min(n,m)} \sum\limits_{i=1}^{\lfloor \frac{n}{d}\rfloor} \sum\limits_{j=1}^{\lfloor \frac{m}{d} \rfloor} [\gcd(i,j)==1] \ i*j*d \ \ \ \ \ ③ \\ &=\sum\limits_{d=1}^{\min(n,m)} d \ \sum\limits_{i=1}^{\lfloor \frac{n}{d}\rfloor} \sum\limits_{j=1}^{\lfloor \frac{m}{d} \rfloor} [\gcd(i,j)==1] \ i*j \ \ \ \ \ ④ \\ &=\sum\limits_{d=1}^{\min(n,m)} d \ \sum\limits_{i=1}^{\lfloor \frac{n}{d}\rfloor} \sum\limits_{j=1}^{\lfloor \frac{m}{d} \rfloor} \sum\limits_{k|\gcd(i,j)} \mu(k) \ i*j \ \ \ \ \ ⑤ \\ &=\sum\limits_{d=1}^{\min(n,m)} d \ \sum\limits_{k=1}^{\min(\lfloor \frac{n}{d} \rfloor,\lfloor \frac{m}{d} \rfloor)}\mu(k) \ \sum\limits_{i=1}^{\lfloor \frac{n}{d}\rfloor} \sum\limits_{j=1}^{\lfloor \frac{m}{d} \rfloor} \ [k|\gcd(i,j)] \ i*j \ \ \ \ \ ⑥ \\ &=\sum\limits_{d=1}^{\min(n,m)} d \ \sum\limits_{k=1}^{\min(\lfloor \frac{n}{d} \rfloor,\lfloor \frac{m}{d} \rfloor)}\mu(k) \ \ \sum\limits_{k*i \ i=1}^{\lfloor \frac{n}{d}\rfloor} \sum\limits_{k*j \ j=1}^{\lfloor \frac{m}{d} \rfloor} \ \ i*j*k^2 \ \ \ \ \ ⑦ \\ &=\sum\limits_{d=1}^{\min(n,m)} d \ \sum\limits_{k=1}^{\min(\lfloor \frac{n}{d} \rfloor,\lfloor \frac{m}{d} \rfloor)}\mu(k) \ k^2 \ \sum\limits_{i=1}^{\lfloor \frac{n}{dx}\rfloor} \sum\limits_{j=1}^{\lfloor \frac{m}{dx} \rfloor} \ \ i*j \ \ \ \ \ ⑧ \end{aligned} \]

①:是根据 \(lcm\) 的定义转换的。

②:交换枚举顺序。

③:将枚举的 \(\gcd\) 提出,右边实际上是除的 \(d^2\) 所以要乘一个 \(d\)

④:把 \(d\) 提出去

⑤:将 \([gcd(i,j)==1]\) 用莫反转换为 $\sum\limits_{k|\gcd(i,j)} \mu(k) $

⑥:在转换枚举顺序,将 \(k\) 提前。

⑦:让他们都乘一个 \(k\) ,也就是强制拥有一个 \(k\) 的因数,这样就可以直接省去一个判断 \(k|\gcd(i,j)\) 的条件

⑧:将 \(k^2\) 提出,预处理出 \(\mu(k)*k^2\) 的前缀和后二次整除分块可以求出答案。

复杂度:\(\Theta(n^{\frac{3}{4}})\)

Code

CF900D Unusual Sequences

求解 \(\gcd=x\) 和为 \(y\) 的数列有多少种

首先,当 \(x \nmid y\) 时,是无解的。

所以不妨将当前的所有数都除 \(x\) ,问题也就转化为了给定和为 \(\frac{y}{x}\) ,所有数的 \(\gcd=1\) 的方案总数。

姑且先不考虑 \(\gcd=1\) 的条件:

\(g(x)\) 为若干个正整数和为 \(x\) 方案数:

用隔板法+二项式反演 很容易得出:$g(x)=\sum\limits_{i=1}^x \dbinom{x-1}{i-1}=\sum\limits_{i=1}^x \dbinom{x-1}{i-1} 1^{i-1} *1{x-i}=2 $

那么加上 \(\gcd=1\) 的条件。

\(f(x)\) 为若干个数和为 \(x\) ,它们的 \(\gcd=1\) 的方案数。

显然:\(g(x)=\sum\limits_{d|x} f(d)\) (也就是每一种正整数解都可以由它的最简形式(即 \(\gcd=1\) 的形式)扩大若干倍转化过来。

根据莫比乌斯反演的因数形式可以得到:

\(f(x)=\sum\limits_{d|x} \mu(\frac{x}{d}) g(x)\)

这个式子,因为 \(x\)\(10^9\) 级别的,无法用线性筛快速求解 \(\mu\) 函数,那么就直接 \(\sqrt{x}\) 直接定义法求得了,但是时间卡得比较紧,可以再加一个线性筛只用质数,这样复杂度就是\(\Theta(\frac{\sqrt{x}}{\log x})\)\(g(x)\) 也珂以通过快速幂快速求得。

总体复杂度应该是 \(\Theta(\sqrt{m}*(\frac{\sqrt{m}}{\log m}+\log m))=\Theta(\frac{m}{\log m}+\sqrt{m}\log m)\) CF神机上应该是稳稳跑过得。

Code

(注意 \(\mu(x)\) 为负数时的处理)

posted @ 2021-08-17 20:16  NuoCarter  阅读(218)  评论(2编辑  收藏  举报