互质与欧拉函数
互质
对于 \(\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}\) 我们可以得到:
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\) 的全部质因子使用容斥,就可以得到 \(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;
}
欧拉函数的性质
- \(\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}\) 😃
-
若 \(a \perp b\),则 \(\varphi(ab) = \varphi(a) \varphi(b)\)
-
若 \(f(n)\) 是积性函数,且在算数基本定理中 \(n = \prod_{i = 1}^{m} p_i^{c_i}\),则 \(f(n) = \prod_{i = 1}^{m} f(p_i^{c_i})\)
-
若 \(p \mid n, p^2 \mid n (p \in \mathbb{P})\),则 \(\varphi(n) = \varphi(\frac{n}{p}) \times p\)
-
若 \(p \mid n, p^2 \nmid n (n \in \mathbb{P})\),则 \(\varphi(n) = \varphi(\frac{n}{p}) \cdot (p - 1)\)
-
\(\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 函数(完全积性):\(\mathbb{1}(n) = 1\)
-
幂函数(完全积性):\(id_k(n) = n^k\)
-
狄利克雷卷积单位元(完全积性):\(\varepsilon(n) = \begin{cases} 1, n = 1 \\ 0, n \neq 1 \end{cases}\)
-
因子幂和函数:\(\sigma_{k}(n) = \sum_{i \mid n} i^k\)
这个东西如果 \(k = 0\) 时又称为 \(d(n)\) 除数函数,表示 \(n\) 的因子个数
-
欧拉函数:\(\varphi(n) = \sum_{i = 1}^{n} [\gcd(i, n) = 1]\)
-
莫比乌斯函数:\(\mu(n) = \begin{cases} 0, n 有平方因子 \\ (-1)^k, n 无平方因子 \end{cases}\)
-
最大公因数:\(\gcd_k(n) = \gcd(n, k)\)
-
\(r(n)\):以原点为圆心,半径为 \(n\) 的 \(\frac{1}{4}\) 圆上的整点个数(不包含一侧端点)
线性筛求欧拉函数
利用线性筛的思想可以在 \(O(n)\) 的时间内快速递推出 \(2 \sim n\) 中每个数的 \(\varphi\)。
由上述的性质 4、5,不难发现,在线性筛法中,每个合数 \(n\) 只会被它的最小质因子 \(p\) 筛一次。我们恰好可以执行:
这是一份 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]);
}
}
}