数论函数

在数论上,数论函数指定义域为正整数的函数。

积性与完全积性

如果一个数论函数 ff 满足 n,m1,gcd(n,m)=1 f(nm)=f(n)f(m)\forall n, m \ge 1, \gcd(n, m) = 1 \ f(nm) = f(n)f(m),则称这个函数是积性的。

如果一个数论函数 ff 满足 n,m1 f(nm)=f(n)f(m)\forall n, m \ge 1 \ f(nm) = f(n)f(m),则称这个函数是完全积性的。

根据定义,所有完全积性函数的集合是所有积性函数的集合的子集。

一些重要的数论函数

  • φ(n)\varphi(n) 表示多少个数小于等于 nn 且与 nn 互质。
  • τ(n)\tau(n) 表示 nn 的约数个数。
  • σ(n)\sigma(n) 表示 nn 的约数之和。
  • dk(n)d_k(n) 表示约数 kk 次方和,即 dndk\sum_{d | n} d^k。且 τ=d0,σ=d1\tau = d_0, \sigma = d_1
  • μ(n)\mu(n) 对于有平方因子的数为 00,否则有奇数 / 偶数个质因数时为 1/1-1 / 1
  • Idk(n)\mathrm{Id}_k(n)nkn^k
  • ϵ(n)\epsilon(n)[n=1][n = 1]

可以证明,以上数论函数都是积性函数。

线性筛求积性函数

根据积性函数的定义,只要我们可以求出所有 f(pk)f(p^k) 的值(pp 为质数,kk 为正整数),我们就可以用线性筛筛出积性函数 ff

举几个例子:假设 nn 的质因数分解为 n=i=1mpiain = \prod_{i = 1}^m {p_i}^{a_i},那么:

  • 根据积性函数的性质,φ(n)=i=1mφ(piai)=i=1m(piaipiai1)\varphi(n) = \prod_{i = 1}^m \varphi({p_i}^{a_i}) = \prod_{i = 1}^m ({p_i}^{a_i} - {p_i}^{a_i - 1})
  • 根据积性函数的性质,τ(n)=i=1mτ(piai)=i=1m(ai+1)\tau(n) = \prod_{i = 1}^m \tau({p_i}^{a_i}) = \prod_{i = 1}^m (a_i + 1)
  • 根据积性函数的性质,σ(n)=i=1mσ(piai)=i=1m(1+pi+pi2++piai)\sigma(n) = \prod_{i = 1}^m \sigma({p_i}^{a_i}) = \prod_{i = 1}^m (1 + p_i + {p_i}^2 + \cdots + {p_i}^{a_i})

φ\varphi 中,φ(pk)=pkpk1\varphi(p^k) = p^k - p^{k - 1};在 τ\tau 中,τ(pk)=k+1\tau(p^k) = k + 1;在 σ\sigma 中,σ(pk)=1+p+p2++pk\sigma(p^k) = 1 + p + p^2 + \cdots + p^k

这三个值都可以计算,所以它们可以用线性筛筛出。

那效率怎么样呢?我们知道,线性筛递推一次的时间复杂度为 O(n)O(n),而 1n1 \sim n 中大概有 nlogn\dfrac{n}{\log n} 个形如 pkp^k 的数,设求 f(pk)f(p^k) 的时间复杂度为 tt,那么总时间复杂度为 O(n+ntlogn)O(n + \dfrac{nt}{\log n})

所以,如果 tt 至多为为 O(logn)O(\log n) 级别,时间复杂度为线性。

数论函数的运用

公约数的和

j=1ni=j+1ngcd(i,j)\sum_{j = 1}^n \sum_{i = j + 1}^n \gcd(i, j)

推一下柿子:

j=1ni=j+1ngcd(i,j)=d=1ndj=1ni=j+1n[gcd(i,j)=d](枚举 gcd 的值 d)=d=1ndj=1dni=j+1dn[gcd(i,j)=1](i 变为 i / d,j 变为 j / d)=d=1ndi=1dnj=1i1[gcd(i,j)=1](由于 gcd 有交换律,所以可以交换 i, j)=d=1ndi=1dnφ(i)(最后一个求和转变为欧拉函数)\begin{aligned} \sum_{j = 1}^n \sum_{i = j + 1}^n \gcd(i, j) &= \sum_{d = 1}^n d \sum_{j = 1}^n\sum_{i = j + 1}^n[\gcd(i, j) = d]\texttt{(枚举 gcd 的值 d)}\\ &= \sum_{d = 1}^n d \sum_{j = 1}^{\lfloor\frac dn\rfloor}\sum_{i = j + 1}^{\lfloor\frac dn\rfloor}[\gcd(i, j) = 1]\texttt{(i 变为 i / d,j 变为 j / d)}\\ &= \sum_{d = 1}^n d \sum_{i = 1}^{\lfloor\frac dn\rfloor}\sum_{j = 1}^{i - 1}[\gcd(i, j) = 1]\texttt{(由于 gcd 有交换律,所以可以交换 i, j)}\\ &= \sum_{d = 1}^n d\sum_{i = 1}^{\lfloor\frac dn\rfloor}\varphi(i)\texttt{(最后一个求和转变为欧拉函数)} \end{aligned}

线性筛出 φ\varphi 并做前缀和即可线性求出答案。

上面推式子过程中枚举 gcd\gcd 是一个很重要的技巧。

例题

[SDOI2008] 仪仗队

[SDOI2008] 沙拉公主的困惑

GCD

Dirichlet 卷积

对于两个数论函数 f,gf, g,它们的 Dirichlet 卷积 h=fgh = f * g 被定义为 h(n)=dnf(d)g(n/d)h(n) = \sum_{d | n} f(d)g(n / d)

这个卷积满足交换律和结合律,则 fg=gf,(fg)h=f(gh)f * g = g * f, (f * g) * h = f * (g * h)

关于上面的数论函数,有一些性质:

  1. ϵf=f\epsilon * f = f,其中 ff 为任意数论函数。(即,ϵ\epsilon 是 Dirichlet 卷积的单位元)

    证明

    把卷积的式子写出来是这样的:dnϵ(d)f(n/d)\sum_{d | n} \epsilon(d)f(n / d)。只有 d=1d = 1ϵ(d)=1\epsilon(d) = 1,所以成立。

  2. dk=IdkId0d_k = \mathrm{Id}_k * \mathrm{Id}_0。(我们还可以推出 τ=Id0Id0,σ=Id1Id0\tau = \mathrm{Id}_0 * \mathrm{Id}_0, \sigma = \mathrm{Id}_1 * \mathrm{Id}_0

    证明

    把卷积的式子写出来是这样的:inik=dk(n)\sum_{i | n} i^k = d_k(n),与 dkd_k 的定义一致。

  3. φId0=Id1\varphi * \mathrm{Id}_0 = \mathrm{Id}_1

    证明

    想证明这个,其实就是证明 dnφ(d)=n\sum_{d | n} \varphi(d) = n

    我们考虑下列 nn 个分数:1n,2n,,nn\dfrac 1n, \dfrac 2n, \dots, \dfrac nn

    把它们都约分至最简形式。显然约分之后的分母只会是 nn 的因数。

    对于每个因数 xx,这些分数里分母为 xx 的分数显然有 φ(x)\varphi(x) 个。而且所有分数一共有 nn 个,所以原命题成立。

  4. μId0=ϵ\mu * \mathrm{Id}_0 = \epsilon(非常重要!)

    证明

    如果 nn 可以被质因数分解为 n=i=1mpiain = \prod_{i = 1}^m {p_i}^{a_i},那么 nn 的一个约数 dd 可以被质因数分解为 d=i=1mpibid = \prod_{i = 1}^m {p_i}^{b_i},且 i[1,m] 0biai\forall i \in [1, m] \ 0 \le b_i \le a_i

    如果有任意一个 bi2b_i \ge 2,则 μ(d)=0\mu(d) = 0,这是没有意义的,所以我们只考虑所有 bi1b_i \le 1 的情况。

    如果 m1m \ge 1(即 n>1n > 1),bib_i 之和为奇数与和为偶数的情况是一样的,都有 2m12^{m - 1} 种,所以会抵消,即 dnμ(d)=0\sum_{d | n} \mu(d) = 0

    否则,d1μ(d)\sum_{d | 1} \mu(d) 即为 μ(1)=1\mu(1) = 1

    这与 ϵ\epsilon 的定义一致,原命题成立。

根据前面的 μId0=ϵ\mu * \mathrm{Id}_0 = \epsilon,可以得出 [n=1]=dnμ(d)[n = 1] = \sum_{d | n} \mu(d),这可以帮助推出题目式子。

运用

公倍数的和

题意:求 i=1nj=1nlcm(i,j)\sum_{i = 1}^n \sum_{j = 1}^n \operatorname{lcm}(i, j)

推一下柿子:

j=1ni=j+1nlcm(i,j)=i=1nj=1nijgcd(i,j)(比较显然的一步)=d=1ni=1ndj=1nd[gcd(i,j)=1]dij(还是枚举 gcd  d,i 变为 i / d,j 变为 j / d)=d=1ndi=1ndj=1ndijkgcd(i,j)μ(k)(把 i, j, d 提出,再用莫比乌斯反演)=d=1ndk=1ndμ(k)i=1ndkj=1ndkijk2(把 k 放到前面枚举,i 变为 i / k / d,j 变为 j / k / d)=d=1ndk=1ndμ(k)k2(ndk(ndk+1)2)2(后面两个求和可以用等差数列求和公式化简)=t=1nktμ(k)k2tk(nt(nt+1)2)2(前面的 t 为原本的 d * k,改为枚举 t  k,d 也就是 t / k)=t=1nktμ(k)tk(nt(nt+1)2)2(化简一下)=t=1nt(nt(nt+1)2)2ktμ(k)k(把带 t 的项移到前面)\begin{aligned} \sum_{j = 1}^n \sum_{i = j + 1}^n \operatorname{lcm}(i, j) &= \sum_{i = 1}^n\sum_{j = 1}^n \dfrac{ij}{\gcd(i, j)}\texttt{(比较显然的一步)}\\ &= \sum_{d = 1}^n\sum_{i = 1}^{\lfloor\frac nd\rfloor}\sum_{j = 1}^{\lfloor\frac nd\rfloor} [\gcd(i, j) = 1]dij \texttt{(还是枚举 gcd 值 d,i 变为 i / d,j 变为 j / d)}\\ &= \sum_{d = 1}^n d\sum_{i = 1}^{\lfloor\frac nd\rfloor} \sum_{j = 1}^{\lfloor\frac nd\rfloor} ij\sum_{k | \gcd(i, j)}\mu(k)\texttt{(把 i, j, d 提出,再用莫比乌斯反演)}\\ &= \sum_{d = 1}^n d \sum_{k = 1}^{\lfloor\frac nd\rfloor}\mu(k)\sum_{i = 1}^{\lfloor\frac n{dk}\rfloor}\sum_{j = 1}^{\lfloor\frac n{dk}\rfloor} ijk^2\texttt{(把 k 放到前面枚举,i 变为 i / k / d,j 变为 j / k / d)}\\ &= \sum_{d = 1}^n d \sum_{k = 1}^{\lfloor\frac nd\rfloor}\mu(k)k^2 \left(\dfrac{\left\lfloor\frac n{dk}\right\rfloor\left(\left\lfloor\frac n{dk}\right\rfloor + 1\right)}{2}\right)^2\texttt{(后面两个求和可以用等差数列求和公式化简)}\\ &= \sum_{t = 1}^n \sum_{k | t}\mu(k)k^2\frac tk \left(\dfrac{\left\lfloor\frac nt\right\rfloor\left(\left\lfloor\frac nt\right\rfloor + 1\right)}{2}\right)^2\texttt{(前面的 t 为原本的 d * k,改为枚举 t 和 k,d 也就是 t / k)}\\ &= \sum_{t = 1}^n \sum_{k | t}\mu(k)tk \left(\dfrac{\left\lfloor\frac nt\right\rfloor\left(\left\lfloor\frac nt\right\rfloor + 1\right)}{2}\right)^2\texttt{(化简一下)}\\ &= \sum_{t = 1}^n t\left(\dfrac{\left\lfloor\frac nt\right\rfloor\left(\left\lfloor\frac nt\right\rfloor + 1\right)}{2}\right)^2\sum_{k | t}\mu(k)k\texttt{(把带 t 的项移到前面)}\\ \end{aligned}

至此,我们只需要求出 ktμ(k)k\sum_{k | t}\mu(k)k 即可实现 O(n)O(n) 计算答案。

然后我们发现这玩意也是积性函数,所以可以直接线性处理,时间复杂度为 O(n)O(n)

例题

「MCOI-02」Convex Hull 凸包

[POI2007] ZAP-Queries

[HAOI2011] Problem b

[SDOI2015] 约数个数和

简单题 / 加强版

Cowslip Collections

[SDOI2017] 数字表格

[MtOI2019] 幽灵乐团 / 莫比乌斯反演基 础 练 习 题