Loading

欧拉函数积性证明以及计算公式推导

欧拉函数 \(\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;
}
posted @ 2025-04-17 17:03  TommyJin  阅读(99)  评论(0)    收藏  举报