数论函数

· · 算法·理论

前言

没有放代码。

你需要确保你学会了一些基础的数论知识,如线性筛、唯一分解定理。 ::::info[一些定义和声明]{open}

积性函数

若函数 f(x) 满足对于 互质a,b,有 f(ab)=f(a)f(b),则 f(x) 为积性函数。

任意a,b 均满足 f(ab)=f(a)f(b),则 f(x) 为完全积性函数。

对于任何的积性函数 f(x) 都有 f(1)=1,易证。

加性函数

若函数 f(x) 满足对于 互质a,b,有 f(ab)=f(a)+f(b),则 f(x) 为加性函数。

任意a,b 均满足 f(ab)=f(a)+f(b),则 f(x) 为完全加性函数。

对于任何的加性函数 f(x) 都有 f(1)=0,易证。

等价性

f(x) 相当于 g(x),则可以记 f(x)\Leftrightarrow g(x),表示 f(x)g(x) 等价。

卷积

两个函数的卷积记为 (f\ast g)(x),若是函数 f(x) 自卷积,也可记为 (f\ast f)(x)=f^2(x)

符号

为书写方便,记 a/b=\left\lfloor\dfrac{a}{b}\right\rfloor。 ::::

欧拉函数

欧拉函数即 \varphi(n),被定义为 1\sim n 中与 n 互质的数的个数。

特性:\ 1.若 p 是质数,则 \varphi(p)=p-1\ 2.若 p 是质数,则 \varphi(p^k)=p^{k-1}\varphi(p)(证明:由于 p 是质数,则 1\sim p-1,p+1\sim 2p-1,\dots,p^k-p\sim p^{k}-1 均与 p 互质,共有 p^{k-1} 节长度为 \varphi(p) 的区间,故 \varphi(p^k)=p^{k-1}\varphi(p))\ 3.积性函数:若 p,q 互质,则有 \varphi(pq)=\varphi(p)\varphi(q)(证明参考 剩余系的复合)

筛法计算

i 是质数,则 \varphi(i)=i-1

i 是合数,则 i 在线性筛中被自己的 最小质因子 筛掉。

ni 的最小质因子,i=nm

::::info[证明]

则有

\mu(x)=\begin{cases}1&x=1\\0&\sum_{i=1}^s a_i\not=s\\(-1)^s&x\not=1,\sum_{i-1}^s a_i=s\end{cases}

其中 \sum_{i-1}^s a_i=s 的条件即 x 不含相同质因子。

筛法计算

i 是质数,则 \mu(i)=-1

i 是合数,则 i 在线性筛中被自己的 最小质因子 筛掉。

ni 的最小质因子,i=nm

::::info[证明]

::::info[证明]

(f\ast g)(x)=\sum_{d\mid x} f(d)g(\dfrac{x}{d})

常见积性函数

元函数 \varepsilon(x)=[x=1]

常数函数 1(x)=1

恒等函数 id(x)=x

常见卷积关系

1.\sum_{d\mid x}\mu(d)=[x=1]\Leftrightarrow (\mu\ast 1)(x)=\varepsilon(x)\ 2.\sum_{d\mid x}\varphi(d)=x\Leftrightarrow (\varphi\ast 1)(x)=id(x)\ 3.\sum_{d\mid x}\mu(d)\dfrac{x}{d}=\varphi(x)\Leftrightarrow (\mu\ast id)(x)=\varphi(x)\ 4.对于任意积性函数 f,有 (f\ast \varepsilon)(x)=f(x)\ 5.对于任意积性函数 f,有 (f\ast 1)(x)\not=f(x)

证明考虑狄利克雷卷积即可,此处省略。

和式的变换

和式即类似 \sum_{k\in K} a_k 的形式的式子。

这里设 n<m

替换条件式

容易理解,若 $i,j$ 均整除 $d$,则 $d$ 至少包含 $i,j$ 的一个公因数,即 $\gcd(i,j)\mid d$。 ### 替换指标变量 $\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=d]=\sum_{id=1}^n\sum_{jd=1}^m [\gcd(id,jd)=d]$。 $\sum_{id=1}^n$ 和 $\sum_{jd=1}^m$ 都是在枚举 $d$ 的倍数,故当 $i,j$ 互质时,$\gcd(id,jd)=d$。 ### 交换求和顺序 $\sum_{i=1}^n\sum_{j=1}^m F(i)G(j)=\sum_{j=1}^m\sum_{i=1}^n F(i)G(j)$。 易证。 ### 分离变量 $\sum_{i=1}^n\sum_{j=1}^m F(i)G(j)=\sum_{j=1}^m F(i)\sum_{i=1}^n G(j)$。 证明考虑乘法交换律。 ## 莫比乌斯反演 ### 定义 对于两个 **积性函数** $f(x),g(x)$,有 $$f(x)=\sum_{d\mid x} g(d)\Leftrightarrow g(x)=\sum_{d\mid x}\mu(d)f(\dfrac{x}{d})$$ 称 $f(x)$ 为 $g(x)$ 的莫比乌斯变换,$g(x)$ 为 $f(x)$ 的莫比乌斯逆变换。 ### 证明 有 $f(x)=\sum_{d\mid x}g(x)1(\dfrac{x}{d})=(g\ast 1)(x),g(x)=\sum_{d\mid x}\mu(d)f(\dfrac{x}{d})=(\mu\ast f)(x)$(狄利克雷卷积)。 若左式成立,有 $f(x)=(g\ast 1)(x)$,则 $g(x)=(\mu\ast f)(x)=(\mu\ast g\ast 1)(x)=((\mu\ast 1)\ast g)(x)=(\varepsilon\ast g)(x)=g(x)$,即右式也成立; 若右式成立,有 $g(x)=(\mu\ast f)(x)$,则 $f(x)=(g\ast 1)(x)=(\mu\ast f\ast 1)(x)=((\mu\ast 1)\ast f)(x)=(\varepsilon\ast f)(x)=f(x)$,即左式也成立。 ### 应用 e.g. [题目传送门](https://www.luogu.com.cn/problem/P1829)。 即给定 $n,m$,求 $\sum_{i=1}^n\sum_{j=1}^m \operatorname{lcm}(i,j)\pmod{20101009}$。 ::::info[解法] 开始推式子。 不妨钦定 $n<m$。 原式即 $\sum_{i=1}^n\sum_{j=1}^m\dfrac{ij}{\gcd(i,j)}$,将 $\gcd(i,j)$ 单独拎出来,得 $$\sum_{i=1}^n\sum_{j=1}^mij\sum_{d=1}^n\dfrac{[\gcd(i,j)=d]}{d}$$ 交换求和顺序,则有 $\sum_{d=1}^n\sum_{i=1}^n\sum_{j=1}^mij\dfrac{[\gcd(i,j)=d]}{d}$,替换指标变量,得 $$\sum_{d=1}^n\sum_{id=1}^n\sum_{jd=1}^mijd^2\dfrac{[\gcd(id,jd)=d]}{d}$$ $id$ 上限为 $n$,则 $i$ 上限为 $n/d$,$j$ 同理(之后统称为修改上限)得 $$\sum_{d=1}^n\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}ijd[\gcd(i,j)=1]$$ 将 $\gcd(i,j)$ 代入 $\sum_{k\mid x}\mu(x)=[x=1]$ 中,得 $$\sum_{k\mid \gcd(i,j)}\mu(\gcd(i,j))=[\gcd(i,j)=1]$$ 代入上式,得 $$\sum_{d=1}^n\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}ijd\sum_{k\mid \gcd(i,j)}\mu(k)$$ 替换条件式,得 $$\sum_{d=1}^n\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}ijd\sum_{k=1}^{n/d}\mu(k)[k\mid i][k\mid j]$$ 交换求和顺序并分离变量,得 $$\sum_{d=1}^nd\sum_{k=1}^{n/d}\mu(k)\sum_{i=1}^{n/d}i[k\mid i]\sum_{j=1}^{m/d}j[k\mid j]$$ 替换指标变量,得 $$\sum_{d=1}^nd\sum_{k=1}^{n/d}\mu(k)\sum_{ik=1}^{n/d}ik\sum_{jk=1}^{m/d}jk$$ 分离变量并修改上限,得 $$\sum_{d=1}^nd\sum_{k=1}^{n/d}\mu(k)k^2\sum_{i=1}^{n/dk}i\sum_{j=1}^{m/dk}j$$ $\mu(k)$ 显然可以通过预处理线性求出,所以只用先对 $d$ 整除分块,然后套一个对 $k$ 的整除分块即可。 :::: ## 杜教筛 给定积性函数 $f(x)$,求 $s(n)=\sum_{i=1}^n f(i)$。 ### 解法 构造积性函数 $g(x)$,使得 $(f\ast g)(x)$ 的前缀和容易计算。 根据递推式 $$g(1)s(n)=\sum_{i=1}^n(f\ast g)(i)-\sum_{i=2}^n g(i)s(n/i)$$ 递归计算 $s(n)$ 即可。 ::::info[证明] 下面证明递推式 $g(1)s(n)=\sum_{i=1}^n(f\ast g)(i)-\sum_{i=2}^n g(i)s(n/i)$ 成立。 现在有 $\sum_{i=1}^n(f\ast g)(i)$,狄利克雷卷积得 $$\sum_{i=1}^n\sum_{i\mid d}f(\dfrac{i}{d})g(d)$$ 替换条件式得 $$\sum_{i=1}^n\sum_{d=1}^n[i\mid d]f(\dfrac{i}{d})g(d)$$ 交换求和顺序得 $$\sum_{d=1}^n\sum_{i=1}^n[i\mid d]f(\dfrac{i}{d})g(d)$$ 替换指标变量得 $$\sum_{d=1}^n\sum_{id=1}^n[id\mid d]f(\dfrac{id}{d})g(d)$$ 即 $$\sum_{d=1}^n\sum_{id=1}^n f(i)g(d)$$ 修改上限得 $$\sum_{d=1}^n\sum_{i=1}^{n/d} f(i)g(d)$$ 分离变量得 $$\sum_{d=1}^n g(d)\sum_{i=1}^{n/d} f(i)$$ 将 $s(n/d)=\sum_{i=1}^{n/d}f(i)$ 代入上式得 $$\sum_{d=1}^n g(d)s(n/d)$$ 将 $i=1$ 时的项分离出来得 $$g(1)s(n)+\sum_{i=2}^n g(i)s(n/i)$$ 即 $$g(1)s(n)=\sum_{i=1}^n(f\ast g)(i)-\sum_{i=2}^n g(i)s(n/i)$$ :::: #### 优化 1.使用线性筛预处理较小的 $s(n)$;\ 2.记忆化防止重复计算;\ 3.使用整除分块做 $s(n/i)$ 的递归。 ### 应用 [很板的](https://www.luogu.com.cn/problem/P4213)。 有 $(\varphi\ast 1)(x)=id(x)$,注意这里 $1(x)$ 是常数函数。 则有 $s(n)=1(1)s(n)=\sum_{i=1}^nid(i)-\sum_{i=2}^n 1(i)s(n/i)=\sum_{i=1}^n i-\sum_{i=2}^n s(n/i)=\dfrac{(n+1)n}{2}-\sum_{i=2}^n s(n/i)$。 有 $(\mu\ast 1)(x)=\varepsilon(x)$。 则有 $s(n)=1(1)s(n)=\sum_{i=1}^n\varepsilon(i)-\sum_{i=2}^ns(n/i)=1-\sum_{i=2}^ns(n/i)$。 ## 例题 ### P11480 先考虑全部圣诞老人来到的情况,根据经典结论,编号为 $a^2$ 的灯会被关闭。 若仅改变编号为 $t$ 的灯的状态,那么需要改变的灯的编号为满足 $at\le n$ 且 $\mu(a)\not= 0$ 的 $at$。这样对于第 $it$ 盏灯,它就会被改变 $\sum_{d\mid i} [\mu(d)\not= 0]$ 次,由于有 $\sum_{d\mid i} \mu(d)=[i=1]$,所以除了 $t$ 之外,编号为 $it$ 的灯都会被改变偶数次。 那么仅改变编号为 $j^2(j\not= 1)$ 的灯,第 $i$ 盏灯就需要改变 $\sum_{j=2}^{\sqrt{j}}[j^2\mid i\land\mu(\dfrac{i}{j^2})\not= 0]$ 次,其中 $\land$ 表示两边的条件需要同时成立。可以发现 $j^2\mid i\land\mu(\dfrac{i}{j^2})\not= 0$ 即要求 $j^2$ 是 $i$ 的因数且 $\dfrac{i}{j^2}$ 没有其它因子是完全平方数,也就是确定了唯一的 $j$。 于是只有在 $i$ 对应的 $j=1$ 时,$\sum_{j=2}^{\sqrt{j}}[j^2\mid i\land\mu(\dfrac{i}{j^2})\not= 0]$ 的值才为 $0$。因此来到的圣诞老人 $i$ 没有相同质因子,即 $\mu(i)=0$,总数为 $\sum_{i=1}^n \mu^2(i)=\sum_{i=1}^{\sqrt{n}}\mu(i)\left\lfloor\dfrac{n}{i^2}\right\rfloor$。 杜教筛求解即可。 ### P10186 引理 1: 在 $n^2$ 点阵中,若直线第一个穿过 $(x,y)$ ,则直线会穿过 $n/\max(x,y)$ 个点。 引理 2: 若直线穿过的第一个点为 $(x,y)$,则 $\gcd(x,y)=1$。 这两个引理比较简单,读者自证不难。 因此对角线一边的答案(另一边是镜像的)就是 $\sum_{i=1}^n \sum_{j=1}^{i-1} (n/\max(i,j))^2[\gcd(i,j)=1]$,由于 $j$ 的上限是 $i-1$,故 $\max(i,j)=i$。 然后用和式的变换可以化出 $\sum_{i=1}^n (n/i)^2\sum_{j=1}^{i-1} [\gcd(i,j)=1]$ 观察到后面的 $\sum_{j=1}^{i-1} [\gcd(i,j)=1]$ 其实就是 $\varphi(i)$,因此原式就是 $\sum_{i=1}^n \varphi(i) (n/i)^2$。 对角线上有 $n$ 个点,贡献就是 $n^2$。 于是答案就是 $n^2+2\sum_{i=1}^n \varphi(i) (n/i)^2$。$n/i$ 可以整除分块,$\varphi(i)$ 前缀和可以用杜教筛。 ### 一些练习题 [P1891](https://www.luogu.com.cn/problem/P1891)、[P3601](https://www.luogu.com.cn/problem/P3601)、[P3768](https://www.luogu.com.cn/problem/P3768)、[P10584](https://www.luogu.com.cn/problem/P10584)