积性函数及其前缀和学习笔记
概念常识部分
常用公式和符号
$\sum \limits_{i=1}^n i^2 = \dfrac{n(n+1)(2n+1)}{6}$
$\sum \limits_{i=1}^n i^3 = (\dfrac{n(n+1)}{2})^2$
$(i,j)=\gcd(i,j)$
$M(n)$ 表示 $n$ 的最小质因子
$[exp]$ 当表达式 $exp$ 为真时取值为 $1$,否则为 $0$
整除
对于一个 $n$,$\lfloor \dfrac{n}{i} \rfloor$,$1 \leq i \leq n$ 只有 $O(\sqrt n)$ 种取值。
$\lfloor \dfrac{\lfloor \frac{n}{i} \rfloor}{j} \rfloor = \lfloor \dfrac{n}{ij} \rfloor$ ($1 \leq i,j \leq n$)
证明:$n=kij+c,0\leq c<ij$,那么 $\lfloor \dfrac{n}{i} \rfloor = \lfloor kj+ \dfrac{c}{i} \rfloor=kj+\lfloor \dfrac{c}{i} \rfloor$,$\lfloor \dfrac{c}{i} \rfloor < j$,所以 $\lfloor \dfrac{\lfloor \frac{n}{i} \rfloor}{j} \rfloor = k + \lfloor \dfrac{\lfloor \frac{c}{i} \rfloor}{j} \rfloor = k + 0 = k$
数论函数
数论函数指定义域为正整数,陪域为复数的函数。
积性函数
对于数论函数 $f$ 若满足 $f(1)=1$,对任意 $\gcd(x,y)=1$,$f(xy)=f(x)f(y)$,则称 $f$ 为积性函数。
若对任意 $x,y$ 均成立,则称为完全积性函数。
积性函数
莫比乌斯函数
定义
$$\mu(1)=1$$
对于 $n>1$,把 $n$ 唯一分解成 $n=p_1^{c_1}p_2^{c_2}\cdots p_k^{c_k}$,若 $c_1=c_2=\cdots=c_k=1$,$\mu(n)=(-1)^{k}$,否则 $\mu(n)=0$。
即 $\mu(n)=0$ 当且仅当 $n$ 中有平方因子。
相关公式
$\sum \limits_{d|n}\mu(d)= [n=1]$
证明:若 $n>1$,$n=p_1^{c_1}p_2^{c_2}\cdots p_k^{c_k}$,对答案有贡献的就只有单一质因子集合,即 $\sum \limits_{d|n}\mu(d)=\mu(1)+\mu(p_1)+\mu(p_2)+\cdots+\mu(p_1p_2)+\cdots+\mu(p_1p_2\cdots p_k)=\sum\limits_i\binom{k}{i}(-1)^i=(1-1)^k=0$
$\mu^2(n)=\sum \limits_{d^2|n}\mu(d)$
证明:$\mu^2(n)=1$,$n$ 是无平方因子数,$\sum\limits_{d^2|n}\mu(d)=\mu(1)=1$。
否则 $n$ 是含平方因子数,对于 $n$ 中的平方因子为集合 $S$,那么 $\sum \limits_{d^2|n}\mu(d)=\sum \limits_{i}\binom{|S|}{i}(-1)^i=0$
欧拉函数
定义
$\varphi(n)=\sum\limits_{i=1}^n[(i,n)=1]$
相关公式
$\sum\limits_{d|n}\varphi(d)=n$
证明:考虑 $n$ 个分数 $\frac{1}{n},\frac{2}{n},\cdots,\frac{n}{n}$,把它们化成最简分式 $\frac{p}{q}$,就是 $n$ 个 $q|n$,$\gcd(p,q)=1$ 的分式,分别为答案贡献 $1$。
$\varphi(p^a)=p^a-p^{a-1}$
证明:$[1,p^a]$ 以内只有 $p$ 的倍数与 $p^a$ 不互质,$p$ 的倍数有 $p^{a-1}$ 个,减去即可。
乘积形式
$\varphi(n)=n\prod\limits_{p|n}(1-\dfrac{1}{p})$
证明:相当于容斥,减去 $n$ 以内所有质因子的倍数。
欧拉函数与莫比乌斯函数的关系
$\varphi(n)=\sum\limits_{d|n}\mu(d)\dfrac{n}{d}$
证明:$\varphi(n)=\sum \limits_{i=1}^n[\gcd(i,n)=1]=\sum\limits_{i=1}^n\sum\limits_{d|(i,n)}\mu(d)=\sum\limits_{d|n}\mu(d)\sum \limits_{i=1}^n[d|i]=\sum\limits_{d|n}\mu(d)\dfrac{n}{d}$
其他积性函数
$\epsilon(n)=[n=1]$
$I_{k}(n)=n^{k}, I(n)=n$
$\sigma_{k}(n)=\sum_{d | n} d^{k}$
$1(n)=1$
狄利克雷卷积
定义
对于两个数论函数 $f$ $g$,定义它们的狄利克雷卷积为 $h$
则 $h(n)=\sum\limits_{d|n}f(d)g(\dfrac{n}{d})$
记 $h=f*g$,$h(n)=(f*g)(n)$ 。
性质
交换律:$f*g=g*f$
结合律:$(f*g)*h=f*(g*h)$
分配律:$(f+g)*h=f*h+g*h$
单位元:$f*\epsilon=\epsilon*f=f$
封闭性:$f,g$ 为积性函数,$f*g$ 为积性函数
一个数论函数 $f$,若 $f(1) \neq 0$,则存在唯一的逆函数 $f^{-1}$,使得 $f*f^{-1}=\epsilon$
$f^{-1}$ 的值如下:
$f^{-1}(1)=\dfrac{1}{f(1)}$
$f^{-1}(n)=\dfrac{-1}{f(1)}\sum\limits_{d|n \wedge d<n}f(\dfrac{n}{d})f^{-1}(d)$,$n>1$
前面的一些式子就可以用狄利克雷卷积表示
$\varphi * 1=I$
$\mu * 1=\epsilon$
$\mu * I=\varphi$
莫比乌斯反演
定义
$f(n)=\sum\limits_{d|n}g(d)$
则 $g(n)=\sum \limits_{d|n}f(d)\mu(\dfrac{n}{d})$
证明:$f=g*1 \Leftrightarrow f*\mu=\mu*g*1=g*(\mu*1)=g* \epsilon=g(n) \Leftrightarrow g(n)=f*\mu$
套路 & 题目
到这里,线性筛加推公式可以解决大部分 $O(1e7)$ 以内的反演题目了。
推公式套路,枚举约数,通过 $\epsilon$ 进行反演。如下
$\sum\limits_{i=1}^n\sum\limits_{j=1}^n[(i,j)=1]=\sum\limits_{i=1}^n\sum\limits_{j=1}^n\sum\limits_{d|(i,j)}\mu(d)=\sum\limits_{d=1}^n\mu(d)\sum \limits_{i=1}^n[d|i]\sum\limits_{j=1}^n[d|j]=\sum \limits_{d=1}^n\mu(d)\lfloor \dfrac{n}{d} \rfloor ^2$
然后就可以整除分块解决。
题目:
BZOJ 2301. [HAOI2011]Problem b 题解
BZOJ 2154. Crash的数字表格 & 2693. jzptab 题解
SPOJ - DIVCNT2 Counting Divisors (square) 题解
杜教筛
定义
这里筛的意思不是筛素数,而是求积性函数前缀和。
有些题目数据范围在 $10^9 \sim 10^{11}$,没法线性筛做,考虑一种构造方法。
题目要求 $S(n)=\sum \limits_{i=1}^n f(n)$,存在一个前缀和易求的积性函数 $g$,它和 $f$ 的狄利克雷卷积的前缀和也易求,那么就可以求 $f$ 的前缀和。
$$\begin{aligned} & \sum_{i=1}^n (f*g)(i) \\=& \sum_{i=1}^n \sum_{d|i}f(d)g(\frac{i}{d}) \\=& \sum_{d=1}^n g(d) S(\lfloor \frac{n}{d} \rfloor) \end{aligned}$$
那么 $g(1)S(n) = \sum \limits_{i=1}^n(f*g)(i)-\sum \limits_{i=2}^n g(i)S(\lfloor \frac{n}{i} \rfloor)$
条件是 $g$ 和 $(f*g)$ 的前缀和都要比较好求。然后记忆化搜索即可。
预处理出 $O(n^{\frac{2}{3}})$ 以内的前缀和,那么总复杂度可以做到 $O(n^{\frac{2}{3}})$
莫比乌斯函数
1
$S(n)=\sum \limits_{i=1}^n \mu(i)$
因为 $\mu * 1 = \epsilon$
所以 $S(n)=1-\sum \limits_{i=2}^n S(\lfloor \dfrac{n}{i} \rfloor)$
2
$S(n)=\sum \limits_{i=1}^n [(i,k)=1]\mu(i)$ $(2 \leq k \leq 2000)$
$f(n)=[(n,k)=1]\mu(n)$,$g(n)=[(n,k)=1]$
$f*g=\sum \limits_{d|n}[(d,k)=1]\mu(d)[(\dfrac{n}{d},k)=1]=\sum \limits_{d|n}\mu(d)[(n,k)=1]=[(n,k)=1][n=1]=[n=1]$
所以 $S(n)=1-\sum \limits_{i=2}^n [(i,k)=1] S(\lfloor \dfrac{n}{i} \rfloor)$
问题变成求 $g(n)=[(n,k)=1]$ 的前缀和。
由 $(n,k)=(k,n\bmod k)$
所以 $\sum \limits_{i=1}^n [(i,k)=1]=\sum \limits_{i=1}^n [(i \bmod k, k)=1]=\sum \limits_{i=1}^{n \bmod k}[(i,k)=1]+\lfloor \dfrac{n}{k}\rfloor \sum \limits_{i=1}^k [(i,k)=1]$
预处理 $1 \sim k$ 的前缀和,那么 $g(n)$ 的前缀和就可以 $O(1)$ 得到。
欧拉函数
1
$S(n)=\sum \limits_{i=1}^n \varphi(i)$
因为 $\varphi * 1=n$
那么 $S(n)=\dfrac{n(n+1)}{2}-\sum \limits_{i=1}^nS(\lfloor \dfrac{n}{i} \rfloor)$
2
$S(n)=\sum \limits_{i=1}^n i^2\varphi(i)$
$f(n)=n^2\varphi(n)$,$g(n)=n^2$
$f*g=\sum \limits_{d|n}d^2\varphi(d)\dfrac{n^2}{d^2}=n^2\sum \limits_{d|n}\varphi(n)=n^3$
所以 $S(n)=\sum \limits_{i=1}^n i^3-\sum \limits_{i=2}^n i^2 S(\lfloor \dfrac{n}{i} \rfloor)$
题目
hihocoder 1456 : Rikka with Lattice
唐老师博客里也有很多
Min25 筛
待学。。