互质与欧拉函数

互质

对于 \(\forall a, b \in \mathbb{N}\),若 \(\gcd(a, b) = 1\),则称 \(a, b\) 互质

对于三个数或者更多个数的情况则这样讨论:

  • \(\gcd(a, b, c) = 1\)\(a, b, c\) 互质

  • \(\gcd(a, b) = \gcd(a, c) =\gcd(b, c) = 1\)\(a, b, c\) 两两互质

显然后者是一个更强的限制条件。

欧拉函数

\(1 \sim N\) 中与 \(N\) 互质的数的个数被称为欧拉函数,记为 \(\varphi(N)\)

在算数基本定理中,由 \(n = p_1^{c_1} p_2^{c_2} \dots p_m^{c_m}\) 我们可以得到:

\[\varphi(N) = N \times \frac{p_1 - 1}{p_1} \times \frac{p_2 - 1}{p_2} \times \dots \times \frac{p_m - 1}{p_m} = N \times \prod_{p | N, p \in \mathbb{P}} \left(1 - \frac{1}{p} \right) \]

Proof

容斥原理来帮忙。

\(p\)\(N\) 的质因子,\(1 \sim N\)\(p\) 的倍数有 \(p, 2p, 3p, \dots, (\frac{N}{p})p\),共 \(\frac{N}{p}\) 个,同理若 \(q\) 也是 \(N\) 的质因子,则 \(1 \sim N\)\(q\) 的倍数有 \(\frac{N}{q}\) 个。如果我们把 \(\frac{N}{p} + \frac{N}{q}\) 个数去掉,那么 \(p \cdot q\) 的倍数被删了两次,我们需要再加上一次,因此 \(1 \sim N\) 中不与 \(N\) 含有共同质因子 \(p, q\) 的数的个数为:

\[N - \frac{N}{p} - \frac{N}{q} + \frac{N}{pq} = N \times (1 - \frac{1}{p} - \frac{1}{q} + \frac{1}{pq}) = N (1 - \frac{1}{p})(1 - \frac{1}{q}) \]

\(N\) 的全部质因子使用容斥,就可以得到 \(1 \sim N\) 中不与 \(N\) 互质的数的个数。

求单个数的欧拉函数值

我们可以从欧拉函数的计算式来看:分解质因数,就可以顺便求出欧拉函数了:

int phi(int n) {
    int res = n;
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            res = res / i * (i - 1);
            while (n % i == 0)
                n /= i;
        }
    }
    if (n > 1)
        res = res / n * (n - 1);
    return res;
}

欧拉函数的性质

  1. \(\forall n \gt 1, \sum_{i = 1}^{n} i \times [\gcd(i, n) = 1] = \frac{n \cdot \varphi(n)}{2}\)
  • 虽然我觉得没有人会和我一样傻但是还是要说一下,注意到 \(\frac{n \cdot \varphi(n)}{2} = \frac{n}{2} \varphi(n) = n \frac{\varphi(n)}{2}\) 😃
  1. \(a \perp b\),则 \(\varphi(ab) = \varphi(a) \varphi(b)\)

  2. \(f(n)\) 是积性函数,且在算数基本定理中 \(n = \prod_{i = 1}^{m} p_i^{c_i}\),则 \(f(n) = \prod_{i = 1}^{m} f(p_i^{c_i})\)

  3. \(p \mid n, p^2 \mid n (p \in \mathbb{P})\),则 \(\varphi(n) = \varphi(\frac{n}{p}) \times p\)

  4. \(p \mid n, p^2 \nmid n (n \in \mathbb{P})\),则 \(\varphi(n) = \varphi(\frac{n}{p}) \cdot (p - 1)\)

  5. \(\sum_{d \mid n} \varphi(d) = n\)

Proof

  • \(\gcd(n, x) = \gcd(n, n - x)\) 知与 \(n\) 不互质的数 \(x, n - x\) 成对出现,平均值为 \(\frac{n}{2}\),所以与 \(n\) 互质的数的个数也是 \(\frac{n}{2}\)

  • 我们从欧拉函数的计算式对 \(a, b\) 进行质因数分解,就能得到性质 2、3 了,由此推出“积性函数”的概念。

  • \(p \mid n, p^2 \mid n\),则 \(n, \frac{n}{p}\) 包含同样的质因子,只是 \(p\) 的指数不同。直接把 \(\varphi(n), \varphi(\frac{n}{p})\) 按照计算式写出来,然后相除,商为 \(p\),性质 4 得证。

  • \(p \mid n, p^2 \nmid n\),则 \(p, \frac{n}{p}\) 互质,我们从 \(\varphi(n)\) 是积性函数可以知道 \(\varphi(n) = \varphi(\frac{n}{p}) \times \varphi(p)\),而因为 \(p \in \mathbb{P}\) 显然 \(\varphi(p) = p - 1\)(在 \(1 \sim p\) 中除 \(\gcd(p, p) = p\) 外,\(\forall i \in [1, p), \gcd(i, p) = 1\)),性质 5 得证。

  • 对于性质 6,我们设 \(f(n) = \sum_{d \mid n} \varphi(d)\),然后用乘法分配律和 \(\varphi\) 为积性函数展开得到:若 \(n \perp m\),则 \(f(nm) = \sum_{d \mid nm} \varphi(d) = \left( \sum_{d \mid n} \varphi(d) \right) \times \left( \sum_{d \mid m} \varphi(d) \right) = f(n) \times f(m)\),也就是 \(\sum_{d \mid n} \varphi(d)\) 是积性函数。对于单个质因子 \(f(p^{m}) = \sum_{d \mid p^m} \varphi(d) = \varphi(1) + \varphi(p) + \varphi(p^2) + \dots + \varphi(p^m)\) 是一个等比数列求和再加 \(1\),结果即为 \(p^m\),所以 \(f(n) = \prod_{i = 1}^{m} f(p_i^{c_i}) = \prod_{i = 1}^{m} p_i^{c_i} = n\),即 \(\sum_{d \mid n} \varphi(d) = n\),性质六得证。

不得惊叹于一个“简单的”、用于“计数”的函数竟然有如此丰富的性质。

积性函数

在欧拉函数的性质 3 中我们使用了“积性函数”的概念,这里做正式引入:

数论函数:亦称算术函数,指定义域为正整数、值域为复数的子集的函数

对于一个数论函数 \(f\),若 \(\forall x, y \in \mathbb{N}^{+}, x \perp y\),有 \(f(x, y) = f(x) f(y)\),则称 \(f\) 是一个积性函数

对于一个数论函数 \(f\),若 \(\forall x, y \in \mathbb{N}^{+}\),有 \(f(x, y) = f(x) f(y)\),则称 \(f\) 是一个完全积性函数

这三个东西显然是一个包含一个的。

从性质 3 中推广开来,不难发现任意的积性函数都可以用筛法来求。

给出一些常见的积性函数(自变量均为 \(n\)):

  1. 1 函数(完全积性):\(\mathbb{1}(n) = 1\)

  2. 幂函数(完全积性):\(id_k(n) = n^k\)

  3. 狄利克雷卷积单位元(完全积性):\(\varepsilon(n) = \begin{cases} 1, n = 1 \\ 0, n \neq 1 \end{cases}\)

  4. 因子幂和函数:\(\sigma_{k}(n) = \sum_{i \mid n} i^k\)

这个东西如果 \(k = 0\) 时又称为 \(d(n)\) 除数函数,表示 \(n\) 的因子个数

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

  2. 莫比乌斯函数:\(\mu(n) = \begin{cases} 0, n 有平方因子 \\ (-1)^k, n 无平方因子 \end{cases}\)

  3. 最大公因数:\(\gcd_k(n) = \gcd(n, k)\)

  4. \(r(n)\):以原点为圆心,半径为 \(n\)\(\frac{1}{4}\) 圆上的整点个数(不包含一侧端点)

线性筛求欧拉函数

利用线性筛的思想可以在 \(O(n)\) 的时间内快速递推出 \(2 \sim n\) 中每个数的 \(\varphi\)

由上述的性质 4、5,不难发现,在线性筛法中,每个合数 \(n\) 只会被它的最小质因子 \(p\) 筛一次。我们恰好可以执行:

\[\begin{cases} p \mid n \And p \mid n^2 \to \varphi(n) = \varphi(\frac{n}{p}) \times p \\ p \mid n \And p \nmid n^2 \to \varphi(n) = \varphi(\frac{n}{p}) \times (p - 1) \\ \end{cases} \]

这是一份 C++ 代码:

int v[N], pri[N], phi[N];
void Euler(const int n) {
    m = 0;
    for (int i = 2; i <= n; i++) {
        if (!v[i]) { v[i] = i; pri[++m] = i; phi[i] = i - 1; }
        for (int j = 1; j <= m; j++) {
            if (pri[j] > v[i] && pri[j] > n / i)
                break;
            v[i * pri[j]] = pri[j];
            phi[i * pri[j]] = phi[i] * (i % pri[j] ? pri[j] - 1 : pri[j]);
        }
    }
}
posted @ 2024-12-15 10:44  revkiru  阅读(18)  评论(0编辑  收藏  举报