【学习笔记】数论大杂烩(持续更新)

前言

数论大杂烩。

欧几里得算法 / 扩展欧几里得算法

欧几里得算法说人话其实就是快速求 \(\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\) 已知):

\[\begin{cases} x = -tb + z_1 \\ y = ta + z_2 \end{cases} \]

同时我们已知 \(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\)

狄利克雷卷积

前言

数论函数

定义:定义域在正整数上,值域为某一数集的函数。

其有如下基本运算:

  1. 数乘:\((x \cdot f)(n) = x \cdot f(n)\)
  2. 加法:\((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)\) 的函数。

积性函数的性质为:

  1. 如果 \(f,g\) 均为积性函数,那么 \(f * g\) 也为积性函数。
  2. 对于 \(\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 = h \]

等式左边展开可得:

\[f * g = \sum\limits_{i \mid n}{f(i) \cdot g(\frac{n}{i})} \]

以上为狄利克雷卷积的定义,然后它有一些运算律。

  1. 交换律:\(f *g = g * f\)

  2. 结合律:\((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))} \]

  3. 分配律:\(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} \]

相关函数定义

以下函数需要进行一个了解。

  1. \(\varphi(n):\) 欧拉函数,表示 \(n\) 中(包括 \(n\))与 \(n\) 互质的数的个数,即 \(\sum\limits_{i=1}^{n}{[\gcd(i, n) = 1]}\)

  2. \(\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\)

  3. \(Id_k(n):\) \(n\)\(k\) 次方。

  4. \(d(n):\) \(n\) 的因数个数和。

  5. \(\sigma_k(n):\) \(n\) 的所有因数的 \(k\) 次方的值的和。

  6. \(\epsilon(n):\) 值为 \([n = 1]\)

  7. \(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:

\[\begin{aligned} &(xf) * g = x(f * g) \\ \Rightarrow &\sum\limits_{i\mid n}{(xf)(i) \cdot g(\frac{n}{i})} \\ \Rightarrow &\sum\limits_{i\mid n}{xf(i) \cdot g(\frac{n}{i})} \\ \Rightarrow &x\sum\limits_{i\mid n}{f(i) \cdot g(\frac{n}{i})} \\ \Rightarrow &x(f * g) \end{aligned} \]

Ex.2:

\[\begin{aligned} &f * \epsilon = f \\ \Rightarrow &\sum\limits_{i\mid n}{f(i) \cdot \epsilon(\frac{n}{i})} \\ &\because \epsilon(\frac{n}{i}) \text{ 当且仅当 $\frac{n}{i} = 1$ 时值为 } 1 \\ &\therefore i = n \text{ 时,原式为 } f(n) \end{aligned} \]

Ex.3:

\[\begin{aligned} &I * I = d \\ \Rightarrow &\sum\limits_{i \mid n}{I(i) \cdot I(\frac{n}{i})} \\ \Rightarrow &\sum\limits_{i \mid n}{1} \\ \Rightarrow &d \end{aligned} \]

Ex.4:

\[\begin{aligned} &I * Id_k = \sigma_k \\ \Rightarrow &\sum\limits_{i \mid n}{I(i) \cdot Id_k(\frac{n}{i})} \\ \Rightarrow &\sum\limits_{i \mid n}{Id_k(\frac{n}{i})} \\ \Rightarrow &\sum\limits_{i \mid n}{i^k} \\ \Rightarrow &\sigma_k \end{aligned} \]

Ex.5:

\[\begin{aligned} &\mu * I = \epsilon \\ \Rightarrow &\sum\limits_{i \mid n}{\mu(i) \cdot I(\frac{n}{i})} \\ \Rightarrow &\sum\limits_{i \mid n}{\mu(i)} \end{aligned} \]

  • \(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:

\[\begin{aligned} &\varphi * I = Id_1 \\ \Rightarrow &\sum\limits_{i\mid n}{\varphi(i) \cdot I(\frac{n}{i})} \\ \Rightarrow &\sum\limits_{i\mid n}{\varphi(i)} \\ \Rightarrow &n \\ &(n = Id_1(n)) \end{aligned} \]

Ex.7:

\[\begin{aligned} &\varphi = \mu * Id_1 \\ \Rightarrow &\varphi = \varphi * \epsilon = \varphi * \mu * I \\ \Rightarrow &\text{ 即证 } \varphi * I = Id_1 \\ \Rightarrow &\sum\limits_{i \mid n}{\varphi(i) \cdot I(\frac{n}{i}}) \\ \Rightarrow &\sum\limits_{i \mid n}{\varphi(i)} \\ \Rightarrow &n \end{aligned} \]

狄利克雷卷积中的逆元

若函数 \(f\) 满足 \(f(1) \neq 0\),则其逆元定义为满足 \(f * g = \epsilon\) 的函数 \(g\)

\[\begin{aligned} &f * g = \epsilon \\ \Rightarrow &\sum\limits_{i \mid n}{f(i) \cdot g(\frac{n}{i})} \\ \Rightarrow &f(1) \cdot g(n) + \sum\limits_{i \mid n, i \neq 1}{f(i) \cdot g(\frac{n}{i})} = [n = 1] \\ &g(n) = \frac{1}{f(1)}([n = 1] - \sum\limits_{i \mid n, i \neq 1}{f(i) \cdot g(\frac{n}{i})}) \end{aligned} \]

所以 \(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)\)

  1. 首先对于 \(n\) 为素数的情况,显然它与除自己的所有数互质,故该情况下 \(\varphi(n) = n - 1\)

  2. 所有的奇数都与 \(2\) 互质,那么有 \(\forall n \in \{x \mid x \bmod 2 = 1\}, \varphi(2n) = \varphi(2) \cdot \varphi(n)\),因为 \(\varphi(2) = 1\),进一步的 \(\varphi(2n) = \varphi(n)\)

  3. 对于 \(\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})}\)
  4. 如果 \(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})\)

  5. 根据方才第 \(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} \]

以上都算是欧拉函数的基本性质,接下来一波是扩展性质。

  1. \(n = ab, d = \gcd(a,b)\),满足 \(a,b \in N^*\),则有 \(\varphi(n) = \frac{\varphi(a) \cdot \varphi(b) \cdot d}{\varphi(d)}\)

  2. \(\forall x \in N^*, \sum\limits_{d \mid x}{\varphi(d)} = x\)

  3. \(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}\)

  4. 对于 \(n \in N^*, n \geq 2\)\(\sum\limits_{x \perp n,x < n}{x} = \varphi(n) \cdot \frac{n}{2}\)

接下来一条一条证明。

  1. 首先根据唯一分解定理分解质因数:

    \[\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} \]

  2. \(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\),证毕。

  3. 分情况讨论。

    • \(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\),证毕。
  4. 首先有引理:

    • 引理 \(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\),展开可得:

\[f(n) = \sum\limits_{i \mid n}{\mu(i)g(\frac{n}{i})} \]

这就是我们想要的莫比乌斯反演公式:

\[f(n) = \sum\limits_{i \mid n}{\mu(i)g(\frac{n}{i})} \Lrarr g(n) = \sum\limits_{i \mid n}{f(i)} \]

莫比乌斯函数的性质

  1. \(\sum\limits_{i \mid n}{\mu(i)} = [n = 1]\),这个由 \(\mu * I = \epsilon\) 可得。

  2. \(\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}\)

  3. \(\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];
      }
   }
}
posted @ 2025-06-18 21:21  xAlec  阅读(37)  评论(0)    收藏  举报