About 欧拉反演
- 定义:欧拉函数 $\varphi(x)$ 是小于等于 $x$ 的数中与 $x$ 互质的数的数目。
常用性质:
- 若 $x$ 为质数,那么 $\varphi(x) = x - 1$。
- 如果 $x = 2n$ ($n$ 为奇数),$\varphi(x) = \varphi(n)$,即 $\varphi(2n) = \varphi(n)$ ($n$ 为奇数)。
- 若 $p$ 为质数,则 $\varphi(p^k) = p^k - p^{k - 1}$。
- 当 $x > 2$ 时, $\varphi(x)$ 为偶数,即 $\gcd(n, x) = \gcd(n, n - x)$。
- 小于 $n$ 的数中,与 $n$ 互质的数的总和为 $\varphi(n) * \frac{n}{2}(n > 1)$ 。
- $n = \sum_{d|n} \varphi(d)$,即 $n$ 的因数(包括1与自己)的欧拉函数之和为 $n$。这条有叫 欧拉反演。
欧拉反演的证明如下:
$$\because \varphi(n) = \sum_{i = 1}^{n}[\gcd(i, n) = 1]$$
$$\therefore \sum_{d|n} \varphi(d) = \sum_{d|n} \sum_{i = 1}^{n}[\gcd(i, n) = d]$$
$$\sum_{d|n} \sum_{i = 1}^{n}[\gcd(i, n) =d] = \sum_{d|n} \sum_{i = 1}^{\frac{n}{d}}[\gcd(i, \frac{n}{d}) = 1]$$
为什么这一步可以这样化简呢,你同时把 $i, n$ 除以 $d$,就变成了 $\frac{i}{d}$ 和 $\frac{n}{d}$,但是你 $i$ 是拿去枚举的,所以只是 $i$ 的枚举范围变了。
$$\sum_{d|n} \sum_{i = 1}^{\frac{n}{d}}[\gcd(i, \frac{n}{d}) = 1] = \sum_{d|n} \varphi(\frac{n}{d})$$
$$\sum_{d|n} \varphi(\frac{n}{d}) = \sum_{d|n} \varphi(n)$$
因为你 $d$ 是整除 $n$ 的,并且一个数的因数是两两对应的,所以 $\varphi(\frac{n}{d})(d|n) = \varphi(n)$。
形象一点理解就是这样:
for (int i = 1; i * i <= n; i ++ )
{
if (n % i == 0)
{
i and n / i are factors of n.
}
}