莫比乌斯反演 & 杜教筛 模板
前记:
突然想学杜教筛,顺便复习莫比乌斯反演。
用 \(\mathbb{P}\) 表示质数集。
0.前置
.1 积性函数
对于任意互质的整数 \(a\) 和 \(b\) 有性质 \(f(ab)=f(a)f(b)\) 的数论函数叫做积性函数。
.2 狄利克雷卷积
定义:
对于两个数论函数 \(f(x),g(x)\),它们的狄利克雷卷积结果 \(h(x)\) 为:
\(h(x)=\sum\limits_{d\mid x} f(d)g(\dfrac{x}{d})\)。记为 \(h=f\ast g\)。
定义函数 \(1(x)=1,\operatorname{id}(x)=x,\varepsilon (x)=[n=1]\)。
则:
\(f\ast 1=\sum\limits_{d\mid x} f(d)\cdot 1=\sum\limits_{d\mid x} f(d)\)。
\(f\ast \operatorname{id}=\sum\limits_{d\mid x} f(d)\cdot \dfrac{x}{d}\)。
\(f\ast \varepsilon=\sum\limits_{d\mid x} f(d)\cdot [d=x]=f\),所以 \(\varepsilon\) 被称作单位元,即对于任何数论函数 \(f\),\(f\ast \varepsilon=f\)。
性质:
-
狄利克雷卷积满足交换律,结合律与分配律。
-
两个积性函数的狄利克雷卷积也是积性函数。
-
积性函数的逆元也是积性函数。
证明皆略。
.3 欧拉函数
定义:
对正整数 \(x\),欧拉函数 \(\varphi(x)\) 表示小于(或小于等于)\(x\) 的正整数中与 \(x\) 互质的数的数目。特别规定 \(\varphi(1)=1\)。即:
显然: \(\varphi(x)=x-1\Leftrightarrow x\in \mathbb{P}\)。
性质:
- 性质 1. 若 \(p\in \mathbb{P}\),\(\varphi(p^n)=p^{n-1}(p-1)\)。
不大于 \(p^n\) 的正整数中,不与之互质的只有 \(p,2p\cdots p^{n-1}\cdot p\),共 \(p^{n-1}\) 个数,所以 \(\varphi(p^n)=p^n-p^{n-1}=p^{n-1}(p-1)\)。
- 性质 2. 若 \(a\mid x\) ,\(\varphi(ax)=a\varphi(x)\)。
易得。
- 性质 3. \(\varphi\) 为积性函数。
证明显然。由于是积性函数,所以根据以上性质与欧拉筛结合,则:
inline void init(int n)
{
phi[1]=1;
for(register int i=2;i<=n;++i)
{
if(!phi[i]) phi[i]=i-1,p[++tot]=i;
for(register int j=1;j<=tot;++j)
{
if(i*p[j]>n) break;
if(!(i%p[j])){phi[i*p[j]]=p[j]*phi[i];break;}
phi[i*p[j]]=(p[j]-1)*phi[i];
}
}
return ;
}
- 性质 4. \(\varphi\ast 1=\operatorname{id}\)。
将正整数 \(x\) 质因数分解为 \(\prod\limits_{i=1}^{k} {p_i}^{c_i}\)。
因为 \(\varphi\) 是积性函数,所以只要证明 \(x'=p^c\) 时 \(\varphi\ast 1=\operatorname{id}\) 即可,所以:
\((\varphi\ast 1)(n')=\sum\limits_{d\mid n'}\varphi (\dfrac{n'}{d})=\sum\limits_{i=0}^c\varphi(p^i)=1+(p-1)\sum\limits_{i=0}^{c-1} p^i=p^c=n'=\operatorname{id}(n')\)。
1.莫比乌斯反演
.1 莫比乌斯函数
定义:
将正整数 \(x\) 质因数分解为 \(\prod\limits_{i=1}^{k} {p_i}^{c_i}\)。定义 \(\mu\)
实际含义为若 \(x\) 含有平方因子则 \(\mu (x)=0\),否则若包含奇数个不同质因数则 \(\mu (x)=-1\),偶数个则 \(\mu (x)=1\)。特别规定 \(\mu (1)=1\)。
性质:
- 性质 1:\(\mu\) 是积性函数。
证明显然。
由于 \(\mu\) 是积性函数,可以使用欧拉筛筛出。对于大于 \(1\) 的正整数 \(x\),设 \(a\) 为 \(x\) 的一个质因数。则:
inline void init(int n)
{
mu[1]=1;
for(register int i=2;i<=n;++i)
{
if(!flag[i]) p[++tot]=i,mu[i]=-1;
for(register int j=1;j<=tot&&i*p[j]<=n;++j)
{
flag[i*p[j]]=true;
if(!(i%p[j])){mu[i*p[j]]=0;break;}
mu[i*p[j]]=-mu[i];
}
}
return ;
}
- 性质 2:\(\mu\ast 1=\varepsilon\)。
设 \(n=\prod\limits_{i=1}^{k} {p_i}^{c_i},n'=\prod\limits_{i=1}^{k} {p_i}\),则 \(\sum\limits_{d\mid n}\mu (d)=\sum\limits_{d\mid n'}\mu (d)=\sum\limits_{i=0}^{k} \dbinom{k}{i}\cdot (-1)^i\)。
根据二项式定理有:
\(\sum\limits_{d\mid n}\mu (d)=\sum\limits_{i=0}^{k} \dbinom{k}{i}\cdot (-1)^i=(1+(-1))^k=[n=1]=\varepsilon (n)\)。
- 即 \(\mu\ast 1=\varepsilon\)。
延伸一下,有:
\([\gcd(i,j)=1]=\varepsilon(gcd(i,j))=\sum\limits_{d\mid \gcd(i,j)}\mu (d)\)。
- 即 \([i\bot j]=\sum\limits_{d\mid \gcd(i,j)}\mu (d)\)。
结合 \(\varphi\ast 1=\operatorname{id}\) 可得:
\(\operatorname{id}\ast \mu=\varphi\ast 1\ast \mu=\varphi\ast \varepsilon=\varphi\)。
- 即 \(\mu\ast \operatorname{id}=\varphi\)。
.2 莫比乌斯变换
对于 \(f(n),g(n)\) 两个数论函数,如果有 \(f=g\ast 1\),则有 \(g=f\ast \mu\)。这样,\(f(n)\) 称为\(g(n)\) 的莫比乌斯变换,\(g(n)\) 称为 \(f(n)\) 的莫比乌斯反演。
证明较为简单:\(f=g\ast 1\) 则 \(f\ast \mu=g\ast 1\ast mu=g\ast \varepsilon=g\)。
所以事实上 \(\varphi\) 与 \(\mu\) 的关系只是 \(f=\operatorname{id},g=\varphi\) 的一组特例。
扩展:\(f(n)=\sum\limits_{i=1}^n t(i)g(\lfloor\dfrac{n}{i}\rfloor)\Leftrightarrow g(n)=\sum\limits_{i=1}^{n}\mu(i)t(i)f(\lfloor\dfrac{n}{i}\rfloor)\)。感觉证明好复杂,但是形式貌似很好背,不学证明了。
2.杜教筛
.1 杜教筛
杜教筛是一种用来求解数论函数的前缀和的算法,可以在低于线性时间内计算 \(s(n)=\sum\limits_{i=1}^n f(i)\)。
对于一个数论函数 \(g\),恒有:
这样我们就得到了含有 \(S(n)\) 的项,移项得:
也就是现在问题要求找到一个 \(g\) ,使得 \((f\ast g)\) 的前缀和与 \(g\) 可以被快速的计算出。
.2 杜教筛实例
欧拉函数前缀和:
由 \(\varphi\ast 1=\operatorname{id}\) 想到使 \(g=1\),原式化为:
莫比乌斯函数前缀和:
由 \(\mu\ast 1=\varepsilon\) 想到使 \(g=1\),原式化为:
\(\varphi\ast\operatorname{id}\) 前缀和:
令 \(g=\operatorname{id}\),则:
上面三个要用到数论分块,所以经过一堆复杂的我不想推导的时间复杂度的推导,将 \(\leq n^{\frac{2}{3}}\) 的数常规线筛出来预处理时间复杂度最优,为 \(O(n^{\frac{2}{3}})\)。
后记:
srds,是不是还应该去学 SoyTony 筛。
srds,还是除了板题啥也不会。