• OI 学习笔记 (1):数论


    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)=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\)
  • 相关阅读:
    蓝桥杯训练 | 二分和前缀和 | 02
    广西师大数据结构 | 2015年真题 | 02
    广西师大数据结构 | 2014年真题 | 01
    Centos添加开机自启项
    SUSE系统添加开机自启项
    LNMP
    源码编译安装 libiconv-1.14(php依赖)
    lnmp
    centos添加epel源
    系统挂在镜像
  • 原文地址:https://www.cnblogs.com/binghun/p/16032227.html
Copyright © 2020-2023  润新知