欧拉函数积性证明以及计算公式推导
欧拉函数 \(\varphi(n)\) 表示小于或等于 \(n\) 的正整数中与 \(n\) 互质的数的数目。
欧拉函数是积性函数证明
假设 \(m\) 和 \(n\) 是两个互质的正整数,即 \(\gcd(m,n)=1\)。要证明欧拉函数 \(\varphi\) 是积性函数,需证明 \(\varphi(mn)=\varphi(m)\varphi(n)\)。
-
构造集合:设集合 \(A=\{x\mid 1\leq x\leq m,\gcd(x,m)=1\}\),集合 \(B=\{y\mid 1\leq y\leq n,\gcd(y,n)=1\}\),集合 \(C=\{z\mid 1\leq z\leq mn,\gcd(z,mn)=1\}\)。那么 \(|A|=\varphi(m)\),\(|B|=\varphi(n)\),\(|C|=\varphi(mn)\),这里 \(|S|\) 表示集合 \(S\) 中元素的个数。
-
建立双射:考虑建立一个从集合 \(A\times B\) 到集合 \(C\) 的映射 \(f\),使得对于任意的 \((x,y)\in A\times B\),\(f((x,y))=nx + my\bmod mn\)。可以证明这个映射是双射,即一一对应。
- 证明单射:假设存在 \((x_1,y_1),(x_2,y_2)\in A\times B\),使得 \(f((x_1,y_1))=f((x_2,y_2))\),即 \(nx_1 + my_1\equiv nx_2 + my_2\pmod{mn}\)。由此可得 \(n(x_1 - x_2)\equiv m(y_2 - y_1)\pmod{mn}\)。因为 \(\gcd(m,n)=1\),所以 \(m\mid(x_1 - x_2)\) 且 \(n\mid(y_2 - y_1)\)。又因为 \(1\leq x_1,x_2\leq m\),\(1\leq y_1,y_2\leq n\),所以 \(x_1 = x_2\) 且 \(y_1 = y_2\),这就证明了 \(f\) 是单射。
- 证明满射:对于任意的 \(z\in C\),因为 \(\gcd(m,n)=1\),根据中国剩余定理,存在唯一的 \(x\in\{1,2,\cdots,m\}\) 和 \(y\in\{1,2,\cdots,n\}\),使得 \(z\equiv nx + my\pmod{mn}\)。又因为 \(\gcd(z,mn)=1\),可以推出 \(\gcd(x,m)=1\) 且 \(\gcd(y,n)=1\),即 \((x,y)\in A\times B\),所以 \(f\) 是满射。
由于 \(f\) 是双射,所以 \(|A\times B|=|C|\),而 \(|A\times B|=|A|\times|B|=\varphi(m)\varphi(n)\),\(|C|=\varphi(mn)\),因此 \(\varphi(mn)=\varphi(m)\varphi(n)\),这就证明了欧拉函数是积性函数。
欧拉函数计算公式推导
1. 当 \(n\) 为质数时
若 \(n\) 是一个质数,那么小于 \(n\) 的所有正整数都与 \(n\) 互质。因为质数只有 \(1\) 和它本身两个因数,所以小于 \(n\) 的正整数(共 \(n - 1\) 个)都不包含 \(n\) 这个因数,即与 \(n\) 互质。因此,当 \(n\) 为质数时,\(\varphi(n)=n - 1\)。
例如,当 \(n = 5\) 时,小于 \(5\) 的正整数有 \(1\)、\(2\)、\(3\)、\(4\),它们都与 \(5\) 互质,所以 \(\varphi(5)=5 - 1 = 4\)。
2. 当 \(n\) 为质数的幂时
若 \(n = p^k\)(其中 \(p\) 是质数,\(k\) 是正整数),那么在 \(1\) 到 \(p^k\) 这 \(p^k\) 个正整数中,不与 \(p^k\) 互质的数就是 \(p\) 的倍数,即 \(p, 2p, 3p, \cdots, p^{k - 1}p\),一共有 \(p^{k - 1}\) 个。所以与 \(p^k\) 互质的数的个数为 \(p^k - p^{k - 1}=p^k(1 - \frac{1}{p})\)。
例如,当 \(n = 2^3 = 8\) 时,在 \(1\) 到 \(8\) 中,\(2\) 的倍数有 \(2\)、\(4\)、\(6\)、\(8\),共 \(4 = 2^2\) 个。那么与 \(8\) 互质的数的个数为 \(8 - 4 = 4\),也可以通过公式计算:\(\varphi(8)=2^3(1 - \frac{1}{2}) = 8\times\frac{1}{2}=4\)。
3. 当 \(n\) 为任意正整数时
对于任意正整数 \(n\),可以将其分解质因数为 \(n = p_1^{k_1}p_2^{k_2}\cdots p_m^{k_m}\)(其中 \(p_i\) 是不同的质数,\(k_i\) 是正整数)。由于欧拉函数是积性函数,即如果 \(\gcd(a, b)=1\)(\(a\) 和 \(b\) 互质),那么 \(\varphi(ab)=\varphi(a)\varphi(b)\)。
根据这个性质,可得:
\(\varphi(n)=\varphi(p_1^{k_1})\varphi(p_2^{k_2})\cdots\varphi(p_m^{k_m})\)
将每个 \(\varphi(p_i^{k_i})=p_i^{k_i}(1 - \frac{1}{p_i})\) 代入上式,得到:
\(\varphi(n)=n\prod_{i = 1}^{m}(1 - \frac{1}{p_i})\)
例如,当 \(n = 6 = 2\times3\) 时,根据公式可得:
\(\varphi(6)=6\times(1 - \frac{1}{2})\times(1 - \frac{1}{3})=6\times\frac{1}{2}\times\frac{2}{3}=2\)
在 \(1\) 到 \(6\) 中,与 \(6\) 互质的数是 \(1\) 和 \(5\),共 \(2\) 个,与计算结果一致。
代码实现
int euler_phi(int n) {
int ans = n;
for (int i = 2; i * i <= n; i++)
if (n % i == 0) {
ans = ans / i * (i - 1);
while (n % i == 0) n /= i;
}
if (n > 1) ans = ans / n * (n - 1);
return ans;
}

浙公网安备 33010602011771号