莫比乌斯变换轻松上手
写了几道莫比乌斯反演的题,不太会反演的套路,反而感觉直接莫比乌斯变换会更容易上手一点...
(参考资料:《数论基础》潘承洞 著)
一些函数
- 莫比乌斯函数:\[\mu(n)= \begin{cases} 1& n=1\\(-1)^s& n=p_1\cdots p_s\\ 0& 其他 \end{cases}\] 即含平方素因子的数函数值为0,1的函数值是1
- 卷积单位元:\[I(n)=[n==1]\]
- 乘法单位元:\(u(n)\equiv1\)
- 恒等函数:\(e(n)=n\)
- 欧拉函数:\(\varphi(n)=\sum\limits_{i=1}^n[(i,n)==1]\) ,从1~n与n互质的数的个数。
Dirichlet乘积
类似于加减乘除,卷积是一种运算,熟悉它的用法即可。
如果\(f(n)\),\(g(n)\) 是两个数论函数,则
\[h(n)=\sum\limits_{d|n}f(d)g(\frac{n}{d})\]
称为\(f(n)\),\(g(n)\) 的\(Dirchlet\)乘积(卷积)。
//一般写成是:\(h=f*g\)
这个运算,它满足交换律和结合律!
- 交换律:\(f*g=g*f\)
- 结合律:\((f*g)*h=f*(g*h)\)
证明是利用卷积的另一种形式:\((f*g)(n)=\sum\limits_{ab=n}f(a)g(b)\)
- 交换律是显然的
- 结合律:\[(f*(g*h))(n)=\sum\limits_{ad=n}f(a)(g*h)(d)=\sum\limits_{ad=n}f(a)\sum\limits_{bc=d}g(b)h(c)=\sum\limits_{abc=n}f(a)g(b)h(c)=((f*g)*h)(n)\]
有用的结论
\(I=\mu *u\),即\(I(n)=\sum\limits_{d|n}\mu(d)=\begin{cases}1 & n=1\\0& n≠1\end{cases}\)
- \(n=1\),显然
\(n=p_1^{\alpha_1}\cdots p_1^{\alpha_1}\),\(\sum\limits_{d|n}=1+C_s^1(-1)+C_s^2(-1)^2+\cdots+C_s^s(-1)^s=(1-1)^n=0\)
基于上述的结论,看见类似\([\gcd(x,y)==1]\) 就能给它代入这个式子了
莫比乌斯变换
若\(F=f*u\) 则\(F\) 称为 \(f\) 的 Möbius 变换
亦即 \[F(n)=\sum\limits_{d|n}f(d)\]
顺便补一下反演,就是反变换,就是用\(f\) 表示 \(F\)
- 若\(F=f*u\),则\(f=F*\mu\)
两边同时卷一下\(\mu\) :\(F*\mu=f*u*\mu=f*I=f\)
// 这也是\(I\) 被称作卷积单位元的原因
- 熟悉的表达:如果\(F(n)=\sum\limits_{d|n}f(d)\),那么\(f(n)=\sum\limits_{d|n}\mu(d)\)
基本操作
- 更换求和号的枚举,比如说,\(\sum\limits_{i=1}^n\sum\limits_{d|i}1=\sum\limits _{d=1}^n\lfloor\frac{n}{d}\rfloor\)
- 改变和式枚举的方式,像,\(\sum\limits_{x=1}^m\sum\limits_{y=1}^n[\gcd(x,y)==k]=\sum\limits_{x=1}^{m/k}\sum\limits_{y=1}^{n/k}[\gcd(x,y)==1]\)
- 对公因数枚举,如,\(\sum\limits_{x=1}^{m/k}\sum\limits_{y=1}^{n/k}[\gcd(x,y)==1]=\sum\limits_{x=1}^{m/k}\sum\limits_{y=1}^{n/k}\sum\limits_{d=1}^{\min(m/k,n/k)}[d|\gcd(x,y)]\)
- 公因数的因子就是两个数的公因子
- \([d|\gcd(x,y)]=[d|x][d|y]\)
- 还有公式:\(d(ij)=\sum\limits_{x|i}\sum\limits_{y|j}[gcd(x,y)==1]\)