学习笔记:数论

0x00 前言

本文(可能)包含的内容:

  1. 学习数论的前置知识
  2. 各类数论函数与其性质(和证明)
  3. 如何使用各类筛求积性函数值
  4. 在 OI 题目中的应用

参考资料:

阅读本文您应该有初中数学水平,如果没有建议阅读初一至初三的数学书。

如果文中有数学记号或专有名词您不懂其意思,请看 0xF0 附件。

0x01 数学杂项

狄利克雷卷积

定义:对于两个数论函数 \(f,g\),他们的狄利克雷卷积 \((f*g)(n)=\sum\limits_{d|n}f(n)g(\frac{n}{d})\),即 \((f*g)(n)=\sum\limits_{ab=n}f(a)g(b)\)

性质:两个积性函数 \(f,g\) 的狄利克雷卷积也是积性函数。

证明:设 \(h\)\(f,g\) 的狄利克雷卷积,即 \(h(n)=\sum\limits_{d|n}f(n)g(\frac{n}{d})\)\(gcd(x,y)=1\)

\[\begin{aligned} h(x)h(y) &= \sum_{i|x} f(i) g(\frac{x}{i}) \sum_{j|y} f(j) g(\frac{y}{j}) \newline &= \sum_{i|x} \sum_{j|y} f(i) f(j) g(\frac{x}{i}) g(\frac{y}{j}) \newline &= \sum_{i|x} \sum_{j|y} f(ij) g(\frac{xy}{ij}) \newline &= \sum_{d|xy} f(d) g(\frac{xy}{d}) \newline &= h(xy) \end{aligned} \]

证毕。

0x10 数论函数

本 part 记录了几种常见的数论函数及其性质(和证明),有一些过于简单的会放在 0xF2 中。

0x11 欧拉函数

欧拉函数,符号为 \(\varphi\),意为 \(\varphi(n)=\sum\limits_{i=1}^{n-1}[\gcd(i,n)=1]\),即所有小于 \(n\) 的数中有几个数和 \(n\) 互质。

接下来是性质(和证明),设 \(p \in prime\)

性质1\(\varphi(p)=p-1\),证明显然。

性质2\(\varphi(p^k)=p^k-p^{k-1}\quad(k \in \mathbb{Z+})\)

证明:\(p^k\) 有且仅有质因数 \(p\),而比它小的 \(p^{k-1}-1\) 个数中,也存在几个数含有质因数 \(p\)

\(p,2p,3p,\cdots,(p^{k-1}-1)p\),一共有 \(p^{k-1}-1\) 个数。

于是在 \(1 \sim p^k-1\) 中,与 \(p^k\) 互质的数的个数为 \((p^k-1)-(p^{k-1}-1)=p^k-p^{k-1}\)

证毕。

性质3\(\varphi(ax)=a\varphi(x)\quad(a|x)\)

性质4\(\varphi(x)\varphi(y)=\varphi(xy)\quad (\gcd(x,y)=1)\),所以欧拉函数是积性函数。

性质5:设 \(n\) 的质因数分解为 \(\prod\limits_{i=1}^mp_i^{a_i}\),那么 \(\varphi(n)=n\prod\limits_{i=1}^m(1-\frac{1}{p_i})\)

性质6\(\sum\limits_{d|n}\varphi(d)=n\)

证明:设 \(f(n)=\sum\limits_{d|n}\varphi(d)\),当 \(gcd(x,y)=1\) 时:

\[\begin{aligned} f(x)f(y) &= \sum_{i|x}\varphi(i) \times \sum_{j|y}\varphi(j)\newline &= \sum_{i|x} \sum_{j|y} \varphi(i) \varphi(j)\newline &= \sum_{i|x} \sum_{j|y} \varphi(i \times j)\newline &= \sum_{d|xy} \varphi(d)\newline &= f(xy) \end{aligned} \]

所以 \(f\) 是积性函数,那么设 \(n\) 的质因数分解为 \(\prod\limits_{i=1}^mp_i^{a_i}\),由 \(f\) 是积性函数可得:

\[f(n) = \prod_{i=1}^mf(p_i^{a_i}) \]

由性质2,可得 \(f(p^c)=\varphi(1)+\varphi(p)+\varphi(p^2)+\cdots+\varphi(p^c)=1+(p-1)+(p^2-p)+\cdots+(p^c-p^{c-1})=p^c\)

所以 \(f(n)=\prod_{i=1}^mf(p_i^{a_i})=\prod_{i=1}^mp_i^{a_i}=n\)

原命题得证。

证毕。

0x12 莫比乌斯函数

莫比乌斯函数,符号为 \(\mu\),定义如下:

\[\left\lbrace \begin{aligned} 1 & & n=1 \newline (-1)^m & & n=\prod\limits_{i=1}^mp_i^{a_i},a_{1\sim n}=1 \newline 0 & & otherwise \newline \end{aligned} \right. \]

性质1\(\mu(x)\mu(y)=\mu(xy)\quad(\gcd(x,y)=1)\)

证明:如果 \(x = 1\)\(y = 1\),显然。

如果 \(\mu(x) = 0\)\(\mu(y) = 0\),显然。

否则 \(\mu(x) \mu(y) = (-1)^{m_x} (-1)^{m_y} = (-1)^{m_x+m_y} = \mu(xy)\)

证毕。

性质2\(\sum\limits_{d|n}\mu(d)=\epsilon(n)\)

证明:与欧拉函数的性质6证明类似。

0x20 筛法

本 part 记录了几种常见的筛法筛积性函数和素数的方法。

0x21 埃拉托斯特尼筛法(埃氏筛)

筛质数

考虑如果一个数 \(x\) 是合数,那么 \(x\) 的倍数也是合数,所以如果我们从小到大考虑每个数,然后同时把当前这个数的所有(比自己大的)倍数记为合数,那么运行结束的时候没有被标记的数就是素数了。

CI N = 2e5; bool Mx[N + 5];
void Eratosthenes (int n) {
	RI i, j; Mx[1] = 1; for (i = 2; i <= n; ++ i) if (! Mx[i]) for (j = 2; i * j <= n; ++ j) Mx[i * j] = 1;
}

时间复杂度 \(O(n\log\log n)\)

0x22 线性筛(欧拉筛)

考虑到埃氏筛一个合数可能被筛多遍,如果省掉无意义的步骤,复杂度就降为 \(O(n)\) 了。

筛质数

CI N = 2e5; int P[N + 5], Nt; bool Mx[N + 5];
void Euler (int n) {
	RI i, j; for (i = 2; i <= n; ++ i) for (! Mx[i] && (P[++ Nt] = i), j = 1; j <= Nt && i * P[j] <= n; ++ j) if (Mx[i * P[j]] = 1, ! (i % P[j])) break;
}

筛欧拉函数

根据欧拉函数的如下性质:

  • \(\varphi(p)=p-1\quad(p \in prime)\)
  • \(\varphi(x\times p)=\varphi(x)\times p\quad(p\mid x)\)
  • \(\varphi(x\times p)=\varphi(x)\times(p-1)\quad(\gcd(p,x)=1)\)

可以在筛质数的同时筛出欧拉函数。

CI N = 1e5; int P[N + 5], Pt, phi[N + 5], n; bool Mx[N + 5];
void C (int d)
{
	RI i, j; phi[1] = 1; for (i = 2; i <= d; ++ i) for (! Mx[i] && (P[++ Pt] = i, phi[i] = i - 1), j = 1; j <= Pt && i * P[j] <= d; ++ j) {
		if (Mx[i * P[j]] = 1, ! (i % P[j]) && (phi[P[j] * i] = phi[i] * P[j], 1)) break;
		else phi[i * P[j]] = phi[i] * (P[j] - 1);
	}
}

筛莫比乌斯函数

CI N = 1e5; int P[N + 5], Pt, mu[N + 5], n; bool Mx[N + 5];
void C (int d)
{
	RI i, j; mu[1] = -1; for (i = 2; i <= d; ++ i) for (! Mx[i] && (P[++ Pt] = i, mu[i] = -1), j = 1; j <= Pt && i * P[j] <= d; ++ j) {
		if (Mx[i * P[j]] = 1, ! (i % P[j]) && (mu[P[j] * i] = 0, 1)) break;
		else mu[i * P[j]] = -mu[i];
	}
}

0x30 例题

P2158 [SDOI2008] 仪仗队

思路

显然,如果一个坐标 \((x,y)\)\(\gcd(x,y) \ne 1\),那么这个点一定会被 \((\frac{x}{\gcd(x,y)},\frac{y}{\gcd(x,y)})\) 这个点挡住。那么,这个式子就很显然了:

\[\sum_{x=1}^n \sum_{y=1}^n [\gcd(x,y)=1] \]

这个式子可以拆成三部分:

\[\sum_{x=1}^n \sum_{y=1}^{x-1} [\gcd(x,y)=1] + \sum_{x=1}^n \sum_{y=x}^{x} [\gcd(x,y)=1] + \sum_{x=1}^n \sum_{y=x+1}^{n} [\gcd(x,y)=1] \]

其中因为对于所有 \((x,x)\) 的点,都会被 \((2,2)\) 挡住,所以中间这部分为 \(1\)。由图像可知,式子前后两部分是对称的,所以这个式子可以化简为:

\[2\sum_{x=1}^n \sum_{y=1}^{x-1} [\gcd(x,y)=1] + 1 \]

\(\sum_{y=1}^{x-1} [\gcd(x,y)=1]\) 这部分刚好是 \(\varphi\) 的定义,所以最终式子为:

\[2\sum_{x=1}^n \varphi(x) + 1 \]

可以先线性筛筛出 \(1 \sim n\) 的欧拉函数,然后 \(O(n)\) 统计答案。

P2398 GCD SUM

\[\sum_{i=1}^n \sum_{j=1}^n \gcd(i,j)\qquad (0) \]

通过欧拉函数的性质,可以将这个式子化简为:

\[\begin{aligned} (0) &= \sum_{i=1}^n \sum_{j=1}^n \sum_{d | gcd(i,j)} \varphi(d)\newline &= \sum_{i=1}^n \sum_{j=1}^n \sum_{d | i,d | j} \varphi(d)\newline &= \sum_{i=1}^n \sum_{j=1}^n \sum_{d=1}^n \varphi(d) [d | i] [d | j]\newline &= \sum_{d=1}^n \varphi(d) \sum_{i=1}^n \sum_{j=1}^n [d | i] [d | j]\newline &= \sum_{d=1}^n \varphi(d) \lfloor \frac{n}{d} \rfloor^2 \end{aligned} \]

这样就可以 \(O(n)\) 解决问题了,可以再套一个整除分块,但是 \(n \le 10^5\),所以没必要。

P3455 [POI2007]ZAP-Queries

假设 \(b \ge a\),那么题目显然让我们求

\[\sum_{i=1}^a \sum_{j=1}^b [\gcd(i,j) = x] \]

\(x\) 除掉,得:

\[\sum_{i=1}^{\lfloor\frac{a}{x}\rfloor} \sum_{j=1}^{\lfloor\frac{b}{x}\rfloor} [\gcd(i,j) = 1] \]

根据莫比乌斯函数的性质,得:

\[\sum_{i=1}^{\lfloor\frac{a}{x}\rfloor} \sum_{j=1}^{\lfloor\frac{b}{x}\rfloor} \sum_{d|\gcd(i,j)} \mu(d) \]

\(d\) 改为枚举 \(d\) 的形式,得:

\[\sum_{i=1}^{\lfloor\frac{a}{x}\rfloor} \sum_{j=1}^{\lfloor\frac{b}{x}\rfloor} \sum_{d=1}^{\lfloor\frac{a}{x}\rfloor} \mu(d) [d | \gcd(i,j)] \]

发现 \(\sum\limits_{d=1}^{\lfloor\frac{a}{x}\rfloor} \mu(d)\) 可以提到前面去,得:

\[\sum_{d=1}^{\lfloor\frac{a}{x}\rfloor} \mu(d) \sum_{i=1}^{\lfloor\frac{a}{x}\rfloor} \sum_{j=1}^{\lfloor\frac{b}{x}\rfloor} [d | \gcd(i,j)] \]

如果 \([d | \gcd(i,j)] = 1\),那么 \(i,j\) 都要是 \(d\) 的倍数,于是得:

\[\sum_{d=1}^{\lfloor\frac{a}{x}\rfloor} \mu(d) \lfloor\frac{a}{xd}\rfloor \lfloor\frac{b}{xd}\rfloor \]

由于有多组数据,所以套一个整除分块,复杂度 \(O(T\sqrt n)\),其中 \(T\) 为数据组数,\(n\)\(\min(a,b)\)

0xF0 附件

0xF1 算式中出现的符号及其含义

符号 含义 例子
\(x \mid y,x \nmid y\) 前者为 \(y\) 整除 \(x\),即 \(x\)\(y\) 的因数;后者与前者相反 \(1 \mid 2,2\mid6 ,4\mid 20,3 \nmid 4,4 \nmid 9\)
\(\gcd(x,y)\) \(x\)\(y\) 的最大公因数 \(\gcd(2,4)=2,\gcd(3,7)=1\)
\(\sum\) 求和,具体见例子 \(\sum\limits_{i=1}^na_i=a_1+a_2+\cdots+a_n,\sum\limits_{d\mid n}d=n的所有因数相加\)
\(\prod\) 求积,具体见例子 \(\prod\limits_{i=1}^n a_i=a_1 \times a_2 \times \cdots \times a_n\)
\(\forall\) 所有满足某条件的数 \(\forall x\mid y\)\(x\) 的取值范围为 \(y\) 的因数,或 \(y\) 的因数集合
\([A]\) 如果 \(A\) 为 false,那么 \([A]=0\);如果 \(A\) 为 true,那么 \([A]=1\) \([2\mid 3]=0,[\gcd(2,4)=2]=1,[1=0]=0\)
\(\lfloor x \rfloor\) 向下取整 \(\lfloor 1.2 \rfloor = 1,\lfloor 4.9 \rfloor = 4,\lfloor 5 \rfloor = 5\)

0xF2 描述中出现的专有名词或字母含义

  • 数论函数: 指在整数集中定义的函数。
  • 积性函数:如果数论函数 \(f\),对于满足 \(\gcd(x,y)=1\)\(\forall x,y\)\(f(x)f(y)=f(xy)\) ,那么 \(f\) 就是一个积性函数。
  • \(\mathbb{Z}\):指整数集,\(\mathbb{Z+}\) 指正整数集。
  • \(\epsilon\):单位函数,定义为 \(\epsilon(1)=1,\epsilon(n)=0\quad(n\ge2)\)
  • \(Id\):单位函数,定义为 \(Id(n)=n\)
posted @ 2022-03-20 21:39  ClapEcho233  阅读(130)  评论(0编辑  收藏  举报