数论:数论函数基础

数论函数

数论函数:数论函数指的是定义域是正整数的一类函数。


积性函数

定义

积性函数: 如果一个数论函数 \(f\) 满足 \(f(1)=1\) 且对于任意互质的正整数 \(x,y\) 都有 \(f(xy)=f(x)f(y)\),则称 \(f\) 是一个积性函数。
完全积性函数: 如果一个数论函数 \(f\) 满足 \(f(1)=1\) 且对于任意正整数 \(x,y\) 都有 \(f(xy)=f(x)f(y)\),则称 \(f\) 是一个完全积性函数。

不难证明,若正整数 \(x\) 的质因数分解结果为 \(x=\prod p_i^{k_i}\)

  • \(f\) 是积性函数,则 \(f(x)=\prod f(p_i^{k_i})\)
  • \(f\) 是完全积性函数,则 \(f(x)=\prod f(p_i)^{k_i}\)

结论

在证明某个函数是积性函数的时候,常用到下面这些结论:
(1) 若 \(f,g\) 均为积性函数,则下面这些函数都是积性函数:

  • \(h(x)=f(x^p)\)
  • \(h(x)=f^p(x)\)
  • \(h(x)=f(x)g(x)\)
  • \(h(x)=\sum_{d|x} f(d)g(\frac{x}{d})\)(证明见狄利克雷卷积部分)

(2) 若 \(f(n)=\sum_{d|n} g(d)\),且 \(f\) 是积性函数,那么 \(g\) 也是积性函数。

证:考虑数学归纳法,显然 \(f(1)=g(1)=1\),现在假设对于 \(\gcd(m1,m2)=1,m1m2<m\)\(m1,m2\) 都有 \(g(m1m2)=g(m1)g(m2)\) 成立。
对于 \(\gcd(m1,m2)=1,m1m2=m\)\(m1,m2\)

\[\begin{aligned} f(m1m2) &=\sum_{d|m1m2} g(d) \\ &=\sum_{d1|m1,d2|m2} g(d1d2) \\ &=g(m1m2)-g(m1)g(m2)+\sum_{d1|m1,d2|m2} g(d1)g(d2) \\ &=g(m1m2)-g(m1)g(m2)+f(m1)f(m2) \end{aligned} \]

上面的第三步是说,我们已经证明了 \(d1d2<m\) 的时候有 \(g(d1d2)=g(d1)g(d2)\),所以我们先把所有 \(g(d1d2)\) 写成 \(g(d1)g(d2)\),然后把还没证明的 \(d1=m1,d2=m2\) 时的情况减掉,仍然用 \(g(m1m2)\) 来计算。
因为 \(f(m1m2)=f(m1)f(m2)\),所以有 \(g(m1m2)=g(m1)g(m2))\)

例子

下面是一些常见的积性函数:

  • 单位函数:\(\epsilon(n) = [n=1]\) (完全积性)。
  • 恒等函数:\(id(n)=n\) (完全积性),有时会用 \(id_k(n)\) 表示 \(n^k\)
  • 常数函数:\(1(n)=1\) (完全积性)。
  • \(d(n)=\sum_{i=1}^n [ i | n ]\)(即 \(n\) 的约数个数)。
  • \(\sigma(n)=\sum_{i|n} i\)
  • 欧拉函数:\(\varphi(n)\),莫比乌斯函数:\(\mu(n)\)

所有积性函数都可以通过线性筛 \(O(n)\) 求出前 \(n\) 项。


数论分块

考虑如下式子:

\[\sum_{i=1}^n f(i)g(\lfloor \frac{n}{i} \rfloor) \]

其中 \(f,g\) 是两个数论函数,当我们可以预处理(或者 \(O(1)\) 计算)出 \(f\) 的前缀和时,数论分块可以在 \(O(\sqrt{n})\) 的时间复杂度内求出上式的值。

引理一: \(\lfloor \frac{\lfloor \frac{n}{x} \rfloor}{y}\rfloor = \lfloor \frac{n}{xy} \rfloor\)

证明:设 \(a=\lfloor \frac{n}{x} \rfloor,\frac{n}{x}=a+b (0\le b<1)\),则 \(\lfloor \frac{n}{xy} \rfloor = \lfloor \frac{a+b}{y} \rfloor\)
因为 \(a \bmod y < y,b<1\) 所以 \(a\bmod y+b<y\),所以 \(\lfloor \frac{a+b}{y} \rfloor\)=\(\lfloor \frac{a}{y} \rfloor\)

引理二: \(\{ \lfloor \frac{n}{d} \rfloor | d\in N_+,d\le n \} \le 2\lfloor \sqrt{n} \rfloor\)

证明:
\(d\le \lfloor \sqrt{n} \rfloor\) 时,\(\lfloor \frac{n}{d} \rfloor\) 的取值只有 \(\lfloor \sqrt{n} \rfloor\) 种。
\(d> \lfloor \sqrt{n} \rfloor\) 时,因为 \(\lfloor \frac{n}{d} \rfloor \le \lfloor \sqrt{n} \rfloor\),所以 \(\lfloor \frac{n}{d} \rfloor\) 的取值也只有 \(\lfloor \sqrt{n} \rfloor\) 种。

引理三: \(\forall 1\le i \le n\),最大的满足 \(\lfloor \frac{n}{i} \rfloor = \lfloor \frac{n}{j} \rfloor\)\(j\)\(\lfloor \dfrac{n}{\lfloor \frac{n}{i} \rfloor}\rfloor\)

证明:
先证明上界。
\(k=\lfloor \frac{n}{i} \rfloor\),则对于任意的满足 \(\lfloor \frac{n}{i} \rfloor = \lfloor \frac{n}{j} \rfloor\)\(j\) 都有 \(k=\lfloor \frac{n}{j} \rfloor \le \frac{n}{j}\),所以 \(\lfloor \frac{n}{k} \rfloor \ge \lfloor \dfrac{n}{\frac{n}{j}} \rfloor = j\)
所以 \(j\) 的上界是 \(\lfloor \dfrac{n}{\lfloor \frac{n}{i} \rfloor}\rfloor\)
再证明可以达到这个上界,即确实有 \(\lfloor \frac{n}{i} \rfloor = \lfloor \dfrac{n}{\lfloor \dfrac{n}{\lfloor \tfrac{n}{i} \rfloor}\rfloor} \rfloor\)
因为:
\(\lfloor \dfrac{n}{\lfloor \dfrac{n}{\lfloor \tfrac{n}{i} \rfloor}\rfloor} \rfloor \le \lfloor \dfrac{n}{\lfloor \dfrac{n}{\tfrac{n}{i}} \rfloor} \rfloor = \lfloor \frac{n}{i} \rfloor,\lfloor \dfrac{n}{\lfloor \dfrac{n}{\lfloor \tfrac{n}{i} \rfloor}\rfloor} \rfloor \ge \lfloor \dfrac{n}{\dfrac{n}{\lfloor \tfrac{n}{i} \rfloor}} \rfloor = \lfloor \frac{n}{i} \rfloor\)
所以结论成立。

我们可以把 \([1,n]\) 分成若干个块 \([l,r]\),每一块内的数都满足 \(\lfloor \frac{n}{i} \rfloor\) 相等。根据引理四这样的块只有 \(O(\sqrt{n})\) 个,根据引理五可以快速求出这些块的左右边界,于是就可以在 \(O(\sqrt{n})\) 的复杂度内求解开头的式子。


狄利克雷(Dirichlet)卷积

定义

两个数论函数 \(f,g\) 的狄利克雷卷积为 \(f*g(n)=\sum_{d|n} f(d)g(\frac{n}{d})\)

性质

(1) 交换律:\(f*g=g*f\)
(2) 结合律:\(f*(g*h)=(f*g)*h\)
(3) 分配律:\(f*g+f*h=f*(g+h)\)

读者自证不难。

(4) \(f=g\) 的充要条件是 \(f*h=g*h\),其中 \(h\) 需要满足 \(h(1)\ne 0\)

证明:充分性显然,接下来证明必要性。
假设 \(f*h=g*h\),其中 \(h\) 满足 \(h(1)\ne 0\),但是存在 \(x\) 使得 \(f(x)\ne g(x)\),我们找到最小的这个 \(x\)
\(F=f*h-g*h=(f-g)*h\),则 \(F(x)=\sum_{d|x} (f(d)-g(d))h(\frac{x}{d})=(f(x)-g(x))h(1) \ne 0\)
\(f*h(x)\ne g*h(x)\),这与假设矛盾,故结论成立。

(5) 对于任何数论函数 \(f\),都有 \(f*\epsilon=f\),即 \(\epsilon\) 是狄利克雷卷积的单位元。

(6) 逆元:对于一个满足 \(f(1)\ne 0\) 的数论函数 \(f\),如果数论函数 \(g\) 满足 \(f*g=\epsilon\),则称 \(g\)\(f\) 的逆元,根据性质 (4) 可知逆元是唯一的,不难构造出 \(f\) 的逆元:

\[g(x)=\frac{\epsilon(x)-\sum_{d|x,d>1} f(d)g(\frac{x}{d})}{f(1)} \]

(7) \(f,g\) 是两个积性函数,则 \(h=f*g\) 也是积性函数

证明:设 \(a,b\in N_+\) 满足 \(\gcd(a,b)=1\) 则:

\[\begin{aligned} h(a)h(b) &=(\sum_{d_1|a} f(d_1)g(\frac{a}{d_1}))(\sum_{d_2|b} f(d_2)g(\frac{b}{d_2})) \\ &=(\sum_{d_1|a,d_2|b} f(d_1)g(\frac{a}{d_1}))f(d_2)g(\frac{b}{d_2}) \\ &=(\sum_{d_1|a,d_2|b} f(d_1d_2)g(\frac{ab}{d_1d_2}))\\ &=\sum_{d|ab} f(d)g(\frac{ab}{d}) \\ &=h(ab) \end{aligned} \]

(8) \(f\) 是积性函数,则 \(f\) 的逆元 \(g\) 也是积性函数

证明:考虑数学归纳法,因为 \(f\) 是积性函数所以 \(f(1)=1\),那么对于 \(a,b\in N_+,\gcd(a,b)=1\)

  • \(ab=1\) 时:\(g(1)=1\) 满足积性函数的定义。
  • \(ab>1\) 时:

\[\begin{aligned} g(ab) &=-\sum_{d|ab,d>1} f(d)g(\frac{ab}{d}) \\ &=-\sum_{d_1|a,d_2|b,d_1d_2>1} f(d_1)f(d_2)g(\frac{a}{d_1})g(\frac{b}{d_2}) \\ &=f(1)f(1)g(a)g(b) - \sum_{d_1|a,d_2|b} f(d_1)f(d_2)g(\frac{a}{d_1})g(\frac{b}{d_2}) \\ &=g(a)g(b) - (\sum_{d_1|a} f(d_1)g(\frac{a}{d_1}))(\sum_{d_2|b} f(d_2)g(\frac{b}{d_2})) \\ &=g(a)g(b) - (f*g(a))(f*g(b)) \\ &=g(a)g(b) - \epsilon(a)\epsilon(b) \\ &=g(a)g(b) \end{aligned} \]


欧拉函数

定义

欧拉函数 \(\varphi(n)=\sum_{i=1}^n [\gcd(i,n)=1]\)

欧拉反演

\(\sum_{d|n} \varphi(d) = n\),也即 \(\varphi * 1 = id\)

证明:设 \(f(x)=\sum_{i=1}^n [\gcd(i,n)=x]\),显然 \(f(x)=[x|n] \cdot \varphi(\frac{n}{x})\),所以 \(n=\sum_{i=1}^n f(i)=\sum_{i|n} \varphi(\frac{n}{i})=\sum_{d|n} \varphi(d)\)

给几个小应用:

  • \(\gcd(a,b)=\sum_{d|\gcd(a,b)} \varphi(d)=\sum_{d|a,d|b} \varphi(d)\)
  • \(\sum_{i=1}^n \gcd(i,n)=\sum_{i=1}^n \sum_{d|i,d|n} \varphi(d)=\sum_{d|n} \lfloor \frac{n}{d} \rfloor \cdot \varphi(d)\)
  • \(\sum_{i=1}^n\sum_{j=1}^n \gcd(i,j)=\sum_{d=1}^n \lfloor \frac{n}{d} \rfloor ^2 \cdot \varphi(d)\),可以用数论分块查询。

莫比乌斯函数

定义

莫比乌斯函数 \(\mu\) 由等式 \(\mu * 1 = \epsilon\) 定义。

积性函数的结论(2)可知 \(\mu\) 是个积性函数,那么我们只需要知道他在 \(\mu(p^k)\) 的取值。
根据他的定义可知 \(\epsilon(p^k) = \mu(p^0) + \mu(p^1) + \mu(p^2) + ... + \mu(p^k)\)
\(k=0\) 时,可知 \(\mu(1)=1\);当 \(k=1\) 时,可推得 \(\mu(p)=-1\);当 \(k>1\) 时,可推得 \(\mu(p^k)=0\)

由此可知所有 \(\mu(n)\) 的值:

\[\mu(n) \begin{cases} = 1 & n=1 \\ = 0 & n 有平方因子 \\ = (-1)^m & m 为质因子个数\\ \end{cases} \]


莫比乌斯反演

莫比乌斯反演的核心就是 \(\mu * 1 =\epsilon\)

公式

\[f(n)=\sum_{d|n} g(d) \Leftrightarrow g(n)=\sum_{d|n} \mu(d)f(\frac{n}{d}) \]

写成卷积的形式就是:\(f=g*1 \Leftrightarrow g=f*\mu\)

证明:\(f=g*1 \Rightarrow f*\mu=g*1*\mu \Rightarrow f*\mu=\epsilon*g=g\)。反过来同理。

当然莫比乌斯反演还有其他两种形式,但是因为不常用所以这里不进行证明,可以自行看 oi.wiki:

  1. \(f(n)=\sum_{n|d} g(d) \Leftrightarrow g(n)=\sum_{n|d}\mu(\frac{d}{n})f(d)\)。(莫比乌斯变换)。
  2. 若数论函数 \(t\) 是完全积性函数,且 \(t(1)=1\),则有:\(f(n)=\sum\limits_{i=1}^n t(i)g(\lfloor \frac{n}{i} \rfloor) \Leftrightarrow g(n)=\sum\limits_{i=1}^n \mu(i)t(i)f(\lfloor \frac{n}{i} \rfloor)\)。(莫比乌斯反演扩展)。

应用

根据 欧拉反演 我们知道 \(\varphi * 1 = id\),所以 \(\varphi = \mu * id\)


例题

放几道比较简单的练手题(好像基本都是莫反)。

I. [HAOI2011] Problem b

可以容斥成求 \(S(n,m)=\sum_{1\le i \le n,1\le j \le m} [\gcd(i,j)=k]\)

\[\begin{aligned} S(n,m)&= \sum_{i=1}^n \sum_{j=1}^m [\gcd(i,j)=k] \\ &= \sum_{i=1}^{\lfloor \frac{n}{k} \rfloor} \sum_{j=1}^{\lfloor \frac{m}{k} \rfloor} [\gcd(i,j)=1] \\ &= \sum_{i=1}^{\lfloor \frac{n}{k} \rfloor} \sum_{j=1}^{\lfloor \frac{m}{k} \rfloor} \sum_{x|\gcd(i,j)} \mu(x) \\ &= \sum_{i=1}^{\lfloor \frac{n}{k} \rfloor} \sum_{j=1}^{\lfloor \frac{m}{k} \rfloor} \sum_{x|i,x|j} \mu(x) \\ &= \sum_{x|i,x|j} \lfloor \frac{n}{xk} \rfloor {\lfloor \frac{m}{xk} \rfloor} \mu(x) \\ \end{aligned} \]

直接整除分块即可。

II. 疯狂 LCM

\[\begin{aligned} \sum_{i=1}^n \operatorname{lcm}(n,i) &= n+\sum_{i=1}^{n-1} \frac{n\cdot i}{\gcd(n,i)} \\ &= n+\frac{1}{2} [ \sum_{i=1}^{n-1} \frac{n\cdot i}{\gcd(n,i)} + \frac{n\cdot (n-i)}{\gcd(n,i)} ] \\ &= n+\frac{1}{2} [ \sum_{i=1}^{n-1} \frac{n^2}{\gcd(n,i)} ] \\ &= \frac{n}{2} + \frac{1}{2} [ \sum_{i=1}^{n} \frac{n^2}{\gcd(n,i)} ] \\ &= \frac{n}{2} + \frac{1}{2} [ \sum_{d|n} \varphi(\frac{n}{d}) \frac{n^2}{d} ] \\ &= \frac{1}{2} [ n+\sum_{d|n} nd\varphi(d) ] \\ &= \frac{1}{2} n\cdot (1+\sum_{d|n} d\varphi(d)) \\ \end{aligned} \]

上面第二步的依据是辗转相减法 \(\gcd(n,i)=\gcd(n,n-i)\)

现在我们求 \(f(n)=\sum_{d|n} d\varphi(d)\),不难证明他是积性函数,考虑求出 \(f(p^k)\) 的值。
易得 \(f(p^k)=\sum_{i=0}^k p^i \varphi(p^i)=\sum_{i=0}^k p^{2i-1}(p-1)\)
\(f(p^k)-f(p^{k-1})=p^{2k-1}(p-1)\)
现在我们希望线性筛求出 \(f\),只需要知道在线性筛的时候如果 \(p | i\) 时怎么求出 \(f(i\cdot p)\),设 \(i=a\cdot p^k\),则:

  • \(f(i\cdot p) - f(i) = a\cdot p^{2k+1}(p-1)\)
  • \(f(i) - f(\frac{i}{p}) = a\cdot p^{2k-1}(p-1)\)

所以 \(f(i\cdot p) = f(i) + a\cdot p^{2k+1}(p-1) = f(i) + p^2(f(i) - f(\frac{i}{p}))\)

预处理 \(O(V)\),回答 \(O(1)\)

III. [国家集训队] Crash的数字表格 / JZPTAB

\[\begin{aligned} f(n,m) &=\sum_{i=1}^n \sum_{j=1}^m \operatorname{lcm}(i,j) \\ &= \sum_{i=1}^n \sum_{j=1}^m \frac{ij}{\gcd(i,j)} \\ &= \sum_{d=1}^{\min(n,m)} \sum_{i=1}^n \sum_{j=1}^m [\gcd(i,j)=d] \cdot \frac{ij}{d} \\ &= \sum_{d=1}^{\min(n,m)} \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{m}{d} \rfloor} [\gcd(i,j)=1] \cdot ijd \\ &= \sum_{d=1}^{\min(n,m)} d \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{m}{d} \rfloor} ij\cdot [\gcd(i,j)=1] \\ &= \sum_{d=1}^{\min(n,m)} d \cdot sum(\lfloor \frac{n}{d} \rfloor,\lfloor \frac{m}{d} \rfloor) \\ \end{aligned} \]

先拆后面的 \(sum(n,m)=\sum_{i=1}^{n} \sum_{j=1}^{m} ij\cdot [\gcd(i,j)=1]\)

\[\begin{aligned} sum(n,m) &=\sum_{i=1}^{n} \sum_{j=1}^{m} ij\cdot [\gcd(i,j)=1] \\ &=\sum_{i=1}^{n} \sum_{j=1}^{m} ij \sum_{d|i,d|j} \mu(d) \\ &=\sum_{d=1}^{\min(n,m)} \mu(d) \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{m}{d} \rfloor} ijd^2 \\ &=\sum_{d=1}^{\min(n,m)} \mu(d)d^2 s(\lfloor \frac{n}{d} \rfloor,\lfloor \frac{m}{d} \rfloor) \\ \end{aligned} \]

其中 \(s(n,m)=\sum_{i=1}^n \sum_{j=1}^m ij\) 显然可以 \(O(1)\) 求,于是可以用整除分块求出 \(sum\),然后再套一层整除分块求出 \(f\),复杂度关于 \(n,m\) 线性。

IV.[SDOI2015] 约数个数和

\(d(ij)\) 一看就不好求,所以我们需要用一个结论把他转换掉,这个结论是:\(d(xy)=\sum_{i|x} \sum_{j|y} [\gcd(i,j)=1]\)

证明:设 \(x=\prod p_i^{a_i},y=\prod p_i^{b_i}\),那么左边显然是 \(\prod (a_i+b_i+1)\)
考虑右边怎么算,显然每个质因子是独立的,分别计算方案数然后乘起来即可,设 \(i\) 里面有 \(s\)\(p_w\)\(j\) 里面有 \(t\)\(p_w\),那么 \(s,t\) 不能同时 \(>1\),所以方案数是 \(a_w+b_w+1\)

然后就可以推式子了。

\[\begin{aligned} \sum_{i=1}^n \sum_{j=1}^m d(ij) &=\sum_{i=1}^n \sum_{j=1}^m \sum_{x|i} \sum_{y|j} [\gcd(x,y)=1] \\ &=\sum_{i=1}^n \sum_{j=1}^m \sum_{x|i} \sum_{y|j} \sum_{d|x,d|y} \mu(d) \\ &=\sum_{i=1}^n \sum_{j=1}^m \sum_{d|i,d|j} \mu(d)d(\frac{i}{d})d(\frac{j}{d}) \\ &=\sum_{d=1}^{\min(n,m)} \mu(d) \sum_{i=1}^{\lfloor \tfrac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \tfrac{m}{d} \rfloor} d(i)d(j) \end{aligned} \]

预处理一下 \(d(i)\) 的前缀和,后面的那个式子就可以 \(O(1)\) 计算了,然后整除分块即可。

参考网址

oi-wiki。

posted @ 2025-05-26 19:12  Green&White  阅读(39)  评论(0)    收藏  举报