【学习笔记】数论大杂烩(持续更新)
前言
数论大杂烩。
欧几里得算法 / 扩展欧几里得算法
欧几里得算法说人话其实就是快速求 \(\gcd(a,b)\) 的方法即辗转相除法,即 \(\gcd(a,b) = \gcd(b,a\bmod b)\)。
证明:
不妨设 \(a >b\),可得 \(a = kb + t\) 其中 \(k \in \mathbb{Z}\),意为 \(t = a \bmod b\)。假设 \(\exists d, d\mid a \text{ and } d \mid b\),那么原式可变成 \(\frac{t}{d} = \frac{a}{d} - k\frac{b}{d}\),可得 \(d \mid c\)。
所以如果 \(\exists d, d\mid a \text{ and } d \mid b\),那么一定有 \(d \mid (a\bmod b)\)。
反过来,\(\exists d, d\mid b \text{ and } d \mid (a\bmod b)\),原式又变成 \(\frac{a\bmod b}{d} = \frac{a}{d} - k\frac{b}{d}\),也可以证得 \(d \mid a\)。
故得两式公因数相同,故最大公因数相同 \(\gcd(a,b) = \gcd(b,a\bmod b)\)。
扩展欧几里得算法是一种求解 \(ax + by = \gcd(a,b)\) 这种方程(\(a,b\) 不全为 \(0\))的一种可行解问题的算法。
过程:
由欧几里得算法得:
\(ax_1 + by_1 = \gcd(a,b) \Leftrightarrow bx_2 + (a\bmod b)y_2 = \gcd(b,a\bmod b)\)
\(\because \gcd(a,b) = \gcd(b,a\bmod b)\)
\(\therefore ax_1 + by_1 = bx_2 + (a\bmod b)y_2\)
又 \(\because a \bmod b = a - \lfloor\frac{a}{b}\rfloor \times b\)
\(\therefore ax_1 + by_1 = bx_2 + (a \bmod b)y_2\)
\(\Rightarrow ax_1 + by_1 = ay_2 + b(x_2 - \lfloor\frac{a}{b}\rfloor y_2)\)
\(\because a = b\)
\(\therefore \begin{cases}x_1 = y_2 \\ y_1 = x_2 - \lfloor\frac{a}{b}\rfloor y_2\end{cases}\)
如此递归直到 \(b = 0\),此时 \(\begin{cases}x = 1 \\ y = 0\end{cases}\) 为一组解,然后再代回去求解。
裴蜀定理
又称贝祖定理,是一个关于不定方程与最大公约数的定理。
内容:设 \(a,b\) 为不全为 \(0\) 的正整数,那么对于任意整数 \(x,y\) 都满足 \(\gcd(a,b) \mid ax + by\),且存在整数 \(x,y\) 使得 \(ax + by = \gcd(a,b)\)。
由裴蜀定理可得,\(\gcd(a,b) \mid c\) 是 \(ax + by = c\) 有解的充要条件。
-
对于定理第一点的证明:显然可得 \(\gcd(a,b) \mid a\) 且 \(\gcd(a,b) \mid b\),那么对于整数 \(x,y\) 有 \(\gcd(a,b) \mid ax\) 和 \(\gcd(a,b) \mid by\),故 \(\gcd(a,b) \mid ax + by\)。
-
对于定理第二点的证明:首先考虑辗转相除的过程。
\[\begin{aligned} &\gcd(a,b) \\ \Rightarrow &\gcd(b, p_1):p_1 = a \bmod b \\ \Rightarrow &\gcd(p_1, p_2):p_2 = b \bmod p_1 \\ \vdots \\ \Rightarrow &\gcd(d, p_n):p_n = 0 \end{aligned} \]那么考虑倒推回去:
\[a = k_1b + p_1 \\ b_1 = k_2p_1 + p_2 \\ \\ \vdots \\ d = k_np_{n-1} + p_n \]那么每次求出 \(p_i\) 反带回去就会得到 \(d\) 一定可以被拆成 \(a\) 的整数倍和 \(b\) 的整数倍的和。
Ex. SGU-106
首先我们要求的就是 \(ax + by = -c\) 的不定方程满足 \(x_1 \leq x \leq x_2\) 和 \(y_1 \leq y \leq y_2\) 的解的个数。
我们并不希望看到式子中有负数,因为那样不方便做,所以考虑对解的范围取相反数。
首先根据裴蜀定理可得,\(ax + by\) 一定是 \(\gcd(a,b)\) 的正整数倍,所以 \(c\) 一定是 \(\gcd(a,b)\) 的正整数倍,否则无解。
那么设最小可行的整数解为 \(x_0,y_0\),即满足 \(ax + by = \gcd(a,b)\) 的两解,那么原式可以写成 \(akx_0 + bky_0 = c\),进一步的 \(a(kx_0 - tb) + b(ky_0+ ta) = c\),那么两个解就看成是一次函数(\(kx_0,ky_0\) 已知):
同时我们已知 \(a,b,z_1,z_2\),且 \(x,y\) 有取值范,那么要求的就是 \(t\) 的取值个数,分别带入 \(x_1,x_2,y_1,y_2\) 求值列出不等式求出 \(t_1,t_2,t_3,t_4\),答案就是 \(\max(t_2,t_3) - \min(t_1,t_4) + 1\)。
狄利克雷卷积
前言
。
数论函数
定义:定义域在正整数上,值域为某一数集的函数。
其有如下基本运算:
- 数乘:\((x \cdot f)(n) = x \cdot f(n)\)。
- 加法:\((f + g)(n) = f(n) + g(n)\)(逐位相加)。
加性函数
加性函数是指在 \(\forall a,b \in N^*,\gcd(a,b) = 1\) 的情况满足 \(f(1) = 0\) 且 \(f(ab) = f(a) + f(b)\) 的函数。
完全加性函数是指满足 \(f(1) = 0\) 且 \(\forall a,b \in N^*,f(ab) = f(a) + f(b)\) 的函数。
加性函数的性质:
对于 \(\forall x \in N^*\),根据唯一分解定理将其分解 \(x = p_1^{k_1} \times p_2^{k_2} \times \cdots \times p_t^{k_t}\)。
- 若 \(f(x)\) 为加性函数,那么有 \(f(x) = \sum\limits_{i = 1}^{t}{f(p_i^{k_i})}\)。
- 若 \(f(x)\) 为完全加性函数,那么有 \(f(x) = \sum\limits_{i = 1}^{t}{f(p_i) \times k_i}\)。
积性函数
积性函数是指在 \(\forall a,b \in N^*,\gcd(a,b) = 1\) 的情况满足 \(f(1) = 0\) 且 \(f(ab) = f(a) \cdot f(b)\) 的函数。
完全积性函数是指满足 \(f(1) = 0\) 且 \(\forall a,b \in N^*,f(ab) = f(a) \cdot f(b)\) 的函数。
积性函数的性质为:
- 如果 \(f,g\) 均为积性函数,那么 \(f * g\) 也为积性函数。
- 对于 \(\forall x \in N^*\),根据唯一分解定理将其分解为 \(x = p_1^{k_1} \times p_2^{k_2} \times \cdots \times p_t^{k_t}\)。
- 若 \(f(x)\) 为积性函数,那么有 \(f(x) = \prod\limits_{i=1}^{t}{f(p_i^{k_i})}\)。
- 若 \(f(x)\) 为完全积性函数,那么有 \(f(x) = \prod\limits_{i=1}^{t}{f(p_i)^{k_i}}\)。
狄利克雷卷积
狄利克雷卷积是数论函数与数论函数之间的一种运算,有定义:
等式左边展开可得:
以上为狄利克雷卷积的定义,然后它有一些运算律。
-
交换律:\(f *g = g * f\)。
-
结合律:\((f * g) * h = f * (g * h)\),证明如下:
\[(f*g)*h = \sum\limits_{i \cdot j \cdot k = n}{(f(i) \cdot g(j)) \cdot h(k)} = \sum\limits_{i\cdot j \cdot k}{f(i) \cdot (g(j) \cdot h(k))} \] -
分配律:\(f * h + g * h = (f + g) *h\),证明如下:
\[\begin{aligned} &\sum\limits_{i \mid n}{f(i) \cdot h(\frac{n}{i})} + \sum\limits_{i \mid n}{g(i) \cdot h(\frac{n}{i})} \\ \Rightarrow &\sum\limits_{i \mid n}{[f(i) + g(i)] \cdot h(\frac{n}{i})} \\ \Rightarrow &(f + g) * h \end{aligned} \]
相关函数定义
以下函数需要进行一个了解。
-
\(\varphi(n):\) 欧拉函数,表示 \(n\) 中(包括 \(n\))与 \(n\) 互质的数的个数,即 \(\sum\limits_{i=1}^{n}{[\gcd(i, n) = 1]}\)。
-
\(\mu(n):\) 莫比乌斯函数,如下:
如果 \(n = 1\),\(\mu(n) = 1\)。
如果 \(n = \prod\limits_{i=1}^{k}{p_i}\) 且 \(p_i\) 为指数次数为 \(1\) 且为质数,\(\mu(n) = (-1)^k\)。
其他情况的 \(n\),\(\mu(n) = 0\)。
-
\(Id_k(n):\) \(n\) 的 \(k\) 次方。
-
\(d(n):\) \(n\) 的因数个数和。
-
\(\sigma_k(n):\) \(n\) 的所有因数的 \(k\) 次方的值的和。
-
\(\epsilon(n):\) 值为 \([n = 1]\)。
-
\(I(n):\) 值恒为 \(1\)。
推式子
以下式子建议先自己推一推,记得要严谨。
Ex.1: \((xf) * g = x(f * g)\)。
Ex.2: \(f * \epsilon = f\)。
Ex.3: \(I*I = d\)。
Ex.4: \(I* Id_k = \sigma_k\)。
Ex.5: \(\mu * I= \epsilon\)。
Ex.6: \(\varphi * I = Id_1\)。
Ex.7: \(\varphi = \mu *Id_1\)
以下来证明:
Ex.1:
Ex.2:
Ex.3:
Ex.4:
Ex.5:
- 若 \(n = 1\),显然成立。
- 若 \(n \neq 1\),\(n = p_1^{k_1} \cdot p_2^{k_2} \cdots p_t^{k_t}\) 且 \(\forall i\in [1,t], k_i = 1\)。
- 枚举 \(i \mid n\) 可以看做从 \(t\) 中选 \(s\) 个,即 \(C^t_{s}\)。
- 那么有 \(\sum\limits_{i\mid n}{\mu(i)} = C^t_0 - C^t_1 + C^t_2 - C^t_3 + \cdots + (-1)^tC^t_t = \sum\limits_{i=0}^{t}{(-1)^iC^t_i}\)。
- 由二项式定理得:\(\sum\limits_{i=0}^{t}{(-1)^i1^{t - i}C^t_i} = (1 - 1)^{t} = 0\),此时 \(\epsilon(n) = 0\),成立。
Ex.6:
Ex.7:
狄利克雷卷积中的逆元
若函数 \(f\) 满足 \(f(1) \neq 0\),则其逆元定义为满足 \(f * g = \epsilon\) 的函数 \(g\)。
所以 \(g\) 也可以记作 \(f^{-1}\)。
欧拉函数
其实就是上文我们提到的 \(\varphi\),定义 \(\varphi(n)\) 表示 \(1 \sim n\) 中与 \(n\) 互质的数的个数,其定义式为 \(\sum\limits_{i=1}^{n}{[\gcd(i,n) = 1]}\)。
欧拉函数的性质 & 计算式
一步一步推导。
开始我们明确一点,\(\varphi\) 是积性函数,即对于互质的两正整数 \(a,b\) 满足 \(\varphi(ab) = \varphi(a) \cdot \varphi(b)\)。
-
首先对于 \(n\) 为素数的情况,显然它与除自己的所有数互质,故该情况下 \(\varphi(n) = n - 1\)。
-
所有的奇数都与 \(2\) 互质,那么有 \(\forall n \in \{x \mid x \bmod 2 = 1\}, \varphi(2n) = \varphi(2) \cdot \varphi(n)\),因为 \(\varphi(2) = 1\),进一步的 \(\varphi(2n) = \varphi(n)\)。
-
对于 \(\forall n \in N^*\),根据唯一分解定理将其分解 \(n = p_1^{k_1} \times p_2^{k_2} \times p_3^{k_3} \times \cdots \times p_t^{k_t}\)。
- 由于 \(\forall i,j \in [1,t], \gcd(p_i^{k_i},p_j^{k_j}) = 1\) 且 \(\varphi\) 是积性函数,故有 \(\varphi(n) = \prod\limits_{i=1}^{t}{\varphi(p_i^{k_i})}\)。
-
如果 \(n = p^k\) 满足 \(p\) 为质数且 \(k \in N^*\),那么有 \(\varphi(n) = p^k - p^{k-1}\)。
-
因为 \(n = p^k\),所以只有 \(n\) 中质数 \(p\) 的正整数倍会不与 \(n\) 互质,这样的数有 \(p^{k-1}\) 个,去除之后剩下的就是与 \(n\) 互质的数。
-
那么该式还可以写成 \(\varphi(n) = p^k (1 - \frac{1}{p})\)。
-
-
根据方才第 \(3,4\) 两点推出的结论,我们可以推广到欧拉函数的计算式:
\[\begin{aligned} \varphi(n) &= \varphi(p_1^{k_1}) \times \varphi(p_2^{k_2}) \times \varphi(p_3^{k_3}) \times \cdots \times \varphi(p_t^{k_t}) \\ &= (p_1^{k_1} - p_1^{k_1 - 1})(p_2^{k_2} - p_2^{k_2 - 1})(p_3^{k_3} - p_3^{k_3 - 1}) \cdots (p_t^{k_t} - p_t^{k_t - 1}) \\ &= \prod\limits_{i=1}^{t}{p_i^{k_i}} (1 - \frac{1}{p_1})(1 - \frac{1}{p_2})(1 - \frac{1}{p_3}) \cdots (1 - \frac{1}{p_t}) \\ &= n(1 - \frac{1}{p_1})(1 - \frac{1}{p_2})(1 - \frac{1}{p_3}) \cdots (1 - \frac{1}{p_t}) \end{aligned} \]
以上都算是欧拉函数的基本性质,接下来一波是扩展性质。
-
设 \(n = ab, d = \gcd(a,b)\),满足 \(a,b \in N^*\),则有 \(\varphi(n) = \frac{\varphi(a) \cdot \varphi(b) \cdot d}{\varphi(d)}\)。
-
\(\forall x \in N^*, \sum\limits_{d \mid x}{\varphi(d)} = x\)。
-
设 \(n \in N^*, p\) 为素数,则有:\(\varphi(n \times p) = \begin{cases} \varphi(n) \cdot \varphi(p), p \nmid n \\ \varphi(n) \cdot p, p \mid n \end{cases}\)。
-
对于 \(n \in N^*, n \geq 2\),\(\sum\limits_{x \perp n,x < n}{x} = \varphi(n) \cdot \frac{n}{2}\)。
接下来一条一条证明。
-
首先根据唯一分解定理分解质因数:
\[\begin{aligned} &a = \prod\limits_{i=1}^{t}{p_i^{\alpha_i}} \\ &b = \prod\limits_{i=1}^{t}{p_i^{\beta_t}} \\ &n = \prod\limits_{i=1}^{t}{p_i^{\alpha_i + \beta_i}} \\ &d = \prod\limits_{i=1}^{t}{p_i^{\min(\alpha_i,\beta_i)}} \end{aligned} \]然后我们列出 \(\varphi\) 的式子:
\[\begin{aligned} &\varphi(a) = a \prod\limits_{i=1}^{t}{(1 - \frac{1}{p_i})} \\ &\varphi(b) = b \prod\limits_{i=1}^{t}{(1 - \frac{1}{p_i})} \\ &\varphi(d) = d \prod\limits_{i=1}^{t}{(1 - \frac{1}{p_i})} \end{aligned} \]令 \(k = \prod\limits_{i=1}^{t}{(1 - \frac{1}{p_i})}\),带入原式:
\[\begin{aligned} &\frac{\varphi(a) \cdot \varphi(b) \cdot d}{\varphi(d)} = \frac{ak \cdot bk \cdot d}{dk} = abk \\ &\because n = ab, k = \prod\limits_{i=1}^{t}{(1 - \frac{1}{p_i})} \\ &\therefore abk = \varphi(n) \end{aligned} \] -
令 \(f(n) = \sum\limits_{d\mid n}{\varphi(d)}\),现在我们要证的就是 \(f(n) = n\)。
取 \(n,m \in N^*\) 且 \(n \perp m\)。
\[\begin{aligned} f(n)f(m) &= \sum\limits_{i\mid n}{\varphi(i)}\sum\limits_{j \mid n}{\varphi(j)} \\ &= \sum\limits_{i \mid n}\sum\limits_{j \mid m}{\varphi(i) \cdot \varphi(j)} \\ &\because n \perp m, i \mid n, j \mid m \\ &\therefore i \perp j \\ f(n)f(m) &= \sum\limits_{i \mid n}\sum\limits_{j \mid m}{\varphi(i) \cdot \varphi(j)} \\ &= \sum\limits_{i \mid n}\sum\limits_{j \mid m}{\varphi(ij)} \\ &= \sum\limits_{i \times j \mid n \times m}{\varphi(ij)} \\ &= f(nm) \end{aligned} \]刚才我们用到了欧拉函数是积性函数的性质。
所以 \(f\) 是积性函数,由唯一分解定理 \(n = \prod\limits_{i=1}^{t}{p_i^{k_i}}\)。
由于 \(f\) 是积性函数,所以有 \(f(n) = \prod\limits_{i=1}^{t}{f(p_i^{k_i})}\)。
\[\begin{aligned} f(p^k) &= \sum\limits_{d \mid p^k}{\varphi(d)} \\ &= \varphi(1) + \varphi(p) + \varphi(p^2) + \cdots + \varphi(p^k) \\ &= 1 + (p - 1) + (p^2 - p) + \cdots + (p^k - p^{k-1}) \\ &= p^k \end{aligned} \]刚才我们用到了基本性质的第四条。
所以 \(f(n) = \prod\limits_{i=1}^{t}{p_i^{k_i}} = n\),证毕。
-
分情况讨论。
-
\(p \nmid n\)
- 故有 \(p \perp n\),则 \(\varphi(n \times p) = \varphi(n) \times \varphi(p)\),这一点是欧拉函数是积性函数的性质。
-
\(p \mid n\)
- 设 \(x \in [1, pn]\),\(x \perp pn \Lrarr x \perp n\),则有 \(\varphi(n \times p) = \sum\limits_{x = 1}^{n \times p}{[x \perp n]}\)。
- 考虑对 \(x\) 分组,每组为 \([n \times i + 1, n \times (i + 1)]\)。
- 根据欧几里得定理有:\(\gcd(n \times i + m, n) = \gcd(m, n)\),即对于第 \(i\) 组中的第 \(m\) 个数来说其与 \(n\) 的 \(\gcd\) 值与零组第 \(m\) 个数与 \(n\) 的 \(\gcd\) 相等。
- 可得每一组中 \(\varphi\) 值与第零组中 \(\varphi\) 相同,即 \(\varphi(n)\)。
- 那么总共有 \(p\) 组,则 \(\varphi(n \times p) = \varphi(n) \times p\),证毕。
-
-
首先有引理:
- 引理 \(1\):\(\gcd(i, n) = 1 \Lrarr \gcd(n - i, n) = 1\)。
证:
假设 \(\gcd(n - i, n) = k \neq 1\),令 \(n - i = ak, n = bk\),且 \(a,b \in \mathbb{Z}\)。
\(\therefore i = n - ak = (b - a)k\)
\(\gcd(i.n) = k \neq 1\),假设不成立,原命题成立。
-
引理 \(2\):由唯一分解定理得 \(n = \prod\limits_{i = 1}^{t}{p_i^{k_i}}\),可得 \(\varphi(n) = \prod\limits_{i=1}^{t}{p_i^{k_i - 1}(p_i - 1)}\),分情况讨论。
-
\(p_i\) 为偶,则 \(\varphi(n)\) 定为偶。
-
\(p_i\) 为奇,则 \((p_i - 1)\) 为偶,\(\varphi(n)\) 依旧为偶。
-
由引理 \(1\) 可得,对于 \(i \perp n\) 定有 \(n - i \perp n\),这样的数对共有 \(\frac{\varphi(n)}{2}\) 个,每对和为 \(n\),则总共的和为 \(\varphi(n) \times \frac{n}{2}\)。
求欧拉函数
由于是积性函数直接线性筛。
void getphiVal() {
phi[1] = 1;
for (int i = 2; i <= N; i ++) {
if (!isprime[i]) {
phi[i] = i - 1;
prime.push_back(i);
}
for (int j : prime) {
if (i * j > N) {
break;
}
isprime[i * j] = true;
if (i % j == 0) {
phi[i * j] = phi[i] * j;
break;
}
phi[i * j] = phi[i] * phi[j];
}
}
}
莫比乌斯反演
学习了狄利克雷卷积之后可以更好的理解莫比乌斯反演。
莫比乌斯反演公式
首先根据狄利克雷卷积中逆的定义,我们可知 \(\mu\) 的逆为 \(I\)。
设 \(g = f * I\),则可得:\(f * I * \mu = g * \mu\),展开可得:
这就是我们想要的莫比乌斯反演公式:
莫比乌斯函数的性质
-
\(\sum\limits_{i \mid n}{\mu(i)} = [n = 1]\),这个由 \(\mu * I = \epsilon\) 可得。
-
\(\sum\limits_{i \mid n}{\frac{\mu(i)}{i}} = \frac{\varphi(n)}{n}\),这个由 \(\varphi = \mu * Id_1\) 可得,即 \(\sum\limits_{i \mid n}{\mu(i) \times \frac{n}{i}} = \varphi(n) \Rarr \sum\limits_{i \mid n}{\frac{\mu(i)}{i}} = \frac{\varphi(n)}{n}\)。
-
\(\mu\) 是积性函数。
-
令 \(x = p_1,y = p_2\) 且 \(p_1,p_2\) 为质数,则 \(\mu(x) = \mu(y) = -1\)。
-
可得令 \(z = xy\),则 \(\mu(z) = (-1)^2 = \mu(x)\mu(y)\)。
-
进一步推广,钦定 \(\mathbb{P}\) 为质数集合,由定义可得:
\[\mu(n) = \begin{cases} 1 \enspace (n = 1) \\ (-1)^t \enspace (n = \prod\limits_{i=1}^{t}{p_i} \wedge p_i \in \mathbb{P}) \\ 0 \enspace \text{otherwise}\end{cases} \]
-
求莫比乌斯函数
由于 \(\mu\) 是积性函数,故线性筛求。
void getmuVal() {
mu[1] = 1;
for (int i = 2; i <= N; i ++) {
if (!isprime[i]) {
mu[i] = -1;
prime.push_back(i);
}
for (int j : prime) {
if (i * j > N) {
break;
}
isprime[i * j] = true;
if (i % j == 0) {
break;
}
mu[i * j] = -mu[i];
}
}
}

浙公网安备 33010602011771号