辣么多的芝士一天学废の莫比乌斯反演篇~

不知道隔壁小姐姐会不会来看? 莫比乌斯函数 定义 \mux={1x=11kx=pi, piP, k=P0other\mux= \left\{ \begin{aligned} \quad &1 \qquad &x=1 \\ \quad &1^k \qquad &x=\prod{pi},\ pi \in P,\ k=|P| \\ \quad &0 \qquad &other \\ \end{aligned} \right. 大概就是: 如果xx能被表示为若偶数个不同素数的积, $\mux=

不知道隔壁小姐姐会不会来看?

莫比乌斯函数

定义

μ(x)={1(x=1)(1)k(x=pi, piP, k=P)0(other)\mu(x)= \left\{ \begin{aligned} \quad &1 \qquad &(x=1) \\ \quad &(-1)^k \qquad &(x=\prod{p_i},\ p_i \in P,\ k=|P|) \\ \quad &0 \qquad &(other) \\ \end{aligned} \right.

大概就是:
如果xx能被表示为若偶数个不同素数的积, μ(x)=+1\mu(x)=+1,x=1x=1理解为00个素数;
如果xx能被表示为若奇数个不同素数的积, μ(x)=1\mu(x)=-1;
其他情况μ(x)=0\mu(x)=0.

我们把它理解为一个容斥系数, 当我们在做一些有关素数的容斥时会用到.

一个性质

dnμ(d)[n==1]\sum_{d|n}{\mu(d)} \Leftrightarrow [n==1]

这个式子有一个比较巧妙的证明, 设kknn不同素因子的个数, 用二项式定理:

dnμ(d)=i=1k(1)iCki=(11)k=[n==1]\begin{aligned} &\sum_{d|n}{\mu(d)} =\sum_{i=1}^{k}{(-1)^{i}C_{k}^{i}} =(1-1)^{k} =[n==1] \end{aligned}

求莫比乌斯函数[^1]

[^1]: 这里用到的是O(N)O(N)线性筛, 可能并不是那么优秀. (据说)对于一类数论函数求前缀和的问题, 杜教筛可以用做到低于线性的复杂度求解.

类似欧拉函数φ\varphi的容斥, 我们容易证明莫比乌斯函数μ\mu也是线性的, 尝试用线性筛预处理.
除去x=1x=1的特殊情况, 我们可以得到一个显然的结论: 对于素数ppμ(p)=1\mu(p)=-1.
每次在更新后面值的时候, μ(ip)=[i mod p>0]μ(i)\mu(ip)=[i\ mod\ p > 0]* -\mu(i).

一个例题[HAOI2011]Problem b[^2]

[^2]: 网上普遍使用的是推式子的方式, 貌似没有这种方法劝退简单.

i[a,b]i \in [a,b], j[c,d]j \in [c,d]. 问:有多少对i,ji,j满足(i,j)=k(i,j)=k.

我们发现这个问题可以转化为求有多少对i,ji,j满足(i,j)=1(i,j)=1(i[ak,bk]i \in [\lfloor \frac{a}{k} \rfloor,\lfloor \frac{b}{k} \rfloor], j[ck,dk]j \in [\lfloor \frac{c}{k} \rfloor,\lfloor \frac{d}{k} \rfloor]),

问题转化为:

a[1,n]a \in [1,n], b[1,m]b \in [1,m]. 问:有多少对a,ba,b满足(a,b)=1(a,b)=1.

一个简单的想法: 容斥.
共有nmnm对数字, 容斥地处理每次某个素数集的倍数. 有奇数个素数则减去贡献, 有偶数个素数则补回贡献.
考虑使用莫比乌斯函数μ\mu作为容斥系数.

我们枚举因子qq, 贡献就是区间内包含qq的对数, 只有包含不重复素因子的才做贡献.

i=1min(n,m)μ(i)nimi\sum_{i=1}^{min(n,m)}{\mu(i)\lfloor \frac{n}{i} \rfloor \lfloor \frac{m}{i} \rfloor}

最后用整除分块将式子优化到O(N)O(\sqrt{N}).

地理课累[^3]卷积

[^3]: 原文Dirichlet, 官译狄利克雷, 北爷译地理课累.

定义

定义f(x)f(x)g(x)g(x)的Dirichlet卷积为: (fg)(n)=dnf(d)g(nd)(f*g)(n)=\sum_{d|n}{f(d)g(\frac{n}{d})}

一些性质

莫比乌斯反演

公式

对于两个数论函数f(x)f(x), g(x)g(x).

f(n)=dng(d),g(n)=dnμ(nd)f(d)f(n)=ndg(d),g(n)=ndμ(dn)f(d)若f(n)=\sum_{d|n}{g(d)}, 有g(n)=\sum_{d|n}{\mu(\frac{n}{d})f(d)} \\ 若f(n)=\sum_{n|d}{g(d)}, 有g(n)=\sum_{n|d}{\mu(\frac{d}{n})f(d)}

证明*%E6%8C%87Dirichlet%E5%8D%B7%E7%A7%AF.">^5

第一种形式

原问题转化为已知f=g1f=g*1证明g=fμg=f*\mu.

利用上文中Dirichlet卷积的性质: f=g1fμ=g1μfμ=gϵg=fμ\begin{aligned} f &= g*1 \\ f*\mu &= g*1*\mu \\ f*\mu &= g*\epsilon \\ g &= f*\mu \end{aligned}

证毕.

第二种形式^6

考虑逆推这个式子.

ndμ(dn)f(d)=k=1+μ(k)f(kn)=k=1+μ(k)kndg(d)=ndg(d)kndμ(k)=ndg(d)ϵ(nd)=g(n)\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{n}{d}}{\mu(k)}} = \sum_{n|d}{g(d)\epsilon(\frac{n}{d})} \\ =& g(n) \end{aligned}

我们把dd表示为knkn的形式, 然后把ff的原定义代入式子.
发现枚举kk再枚举knkn的倍数可以转换为直接枚举nn的倍数再求出kk,
发现后面那一块其实就是ϵ\epsilon, gϵ=gg*\epsilon=g.

证毕.

一个例题[国家集训队]Crash的数字表格

题意即:

i=1nj=1m[i,j]\sum_{i=1}^{n} \sum_{j=1}^{m} [i,j]

略微转化一下,得到: dmin(n,m)di=1ndj=1mdϵ(gcd(i,j))ij\sum_{d}^{min(n,m)}{ d* \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{m}{d} \rfloor} \epsilon(gcd(i,j))*i*j }

把后面的式子单独拿出来算, f(a,b)=i=1aj=1bϵ(gcd(i,j))ij=d=1min(a,b)μ(d)diadjbij=d=1min(a,b)μ(d)d2i=1adj=1bdij\begin{aligned} f(a,b)=& \sum_{i=1}^{a} \sum_{j=1}^{b} \epsilon(gcd(i,j))*i*j \\=& \sum_{d=1}^{min(a,b)}{ \mu(d) \sum_{d|i}^{a} \sum_{d|j}^{b} i*j } \\=& \sum_{d=1}^{min(a,b)}{ \mu(d)*d^2 \sum_{i=1}^{\lfloor \frac{a}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{b}{d} \rfloor} i*j } \end{aligned}

发现后面这一块就是等差数列求和. g(a,b)=i=1aj=1bij=i=1aij=1bj=a(b+1)a(b+1)4g(a,b)= \sum_{i=1}^{a} \sum_{j=1}^{b} i*j = \sum_{i=1}^{a}{ i* \sum_{j=1}^{b} j } = \frac{a(b+1)a(b+1)}{4}

所以 f(a,b)=d=1min(a,b)μ(d)d2g(ad,bd)f(a,b)= \sum_{d=1}^{min(a,b)} \mu(d)*d^2*g(\lfloor \frac{a}{d} \rfloor,\lfloor \frac{b}{d} \rfloor) 可以整除分块.

原式化为 dmin(n,m)df(nd,md)\sum_{d}^{min(n,m)} d*f(\lfloor \frac{n}{d} \rfloor,\lfloor \frac{m}{d} \rfloor)

可以整除分块.

整个式子比较麻烦, 应该尽量降低代码耦合度(分解出ffgg两个函数应该就没问题了).

一天学废系列预告:

Polya定理 简单概率期望DP&高斯消元随机游走概率期望

Comments

0

No comments yet.