浅析欧拉函数

前置知识

欧拉定理 费马小定理 剩余系

证明:剩余系同乘 k 还是简化剩余系

证明:
设模 $$ m $$ 的简化剩余系为 $$ {a_1, a_2, \ldots, a_{\varphi(m)}} $$,其中每个 $$ a_i $$ 满足 $$ \gcd(a_i, m) = 1 $$。取与 $$ m $$ 互质的整数 $$ k $$(即 $$ \gcd(k, m) = 1 $$),考虑集合 $$ {k a_1, k a_2, \ldots, k a_{\varphi(m)}} $$,需证明此集合仍为模 $$ m $$ 的简化剩余系。

步骤 1:证明新集合中每个数与 $$ m $$ 互质

  • 由于 $$ \gcd(k, m) = 1 $$ 且 $$ \gcd(a_i, m) = 1 $$,根据最大公约数的性质:

    \[\gcd(k a_i, m) = \gcd(k, m) \cdot \gcd(a_i, m) = 1 \cdot 1 = 1. \]

    因此,新集合中每个数 $$ k a_i $$ 均与 $$ m $$ 互质。

步骤 2:证明新集合中元素彼此模 $$ m $$ 不同余

  • 假设存在 $$ i \neq j $$ 使得 $$ k a_i \equiv k a_j \pmod{m} $$。
  • 因 $$ \gcd(k, m) = 1 $$,故 $$ k $$ 在模 $$ m $$ 下有逆元 $$ k^{-1} $$,两边同乘 $$ k^{-1} $$ 得:

    \[a_i \equiv a_j \pmod{m}. \]

  • 但原简化剩余系中元素彼此不同余,矛盾。故 $$ k a_i \not\equiv k a_j \pmod{m} $$。

步骤 3:证明新集合覆盖所有简化剩余类

  • 原简化剩余系有 $$ \varphi(m) $$ 个元素,新集合亦有 $$ \varphi(m) $$ 个元素。
  • 由于步骤 2 已证元素彼此不同余,且每个元素与 $$ m $$ 互质,故新集合恰好构成模 $$ m $$ 的简化剩余系。

结论:
将简化剩余系中所有数同乘以一个与 $$ m $$ 互质的数后,所得集合仍为简化剩余系。

证毕。

定义

欧拉函数定义为小于等于 \(n\) 的正整数中与 \(n\) 互质的数的个数,记为 \(\varphi (n)\)

\(\varphi (n)= \sum_{i=1}^{n}[ \gcd (i,n)=1]\)

性质

  • \(n = \sum_{d \mid n} \varphi (n)\)
  • 欧拉函数是积性函数,即 \(\forall \gcd(a,b)=1 \ ,\varphi (ab) = \varphi (a) \varphi (b)\)
  • \(p\) 是质数,则 \(\varphi (p) = p-1\)
  • \(p\) 是质数,则 \(\varphi (p^k) = p^k - p^{k-1}\)
  • \(n=a \times b\ ,\ \gcd(a,b)=d\) ,则 \(\varphi(n) = \frac{\varphi(a) \times \varphi(b) \times n}{\varphi(n)}\)
  • \(n \ge 2\),所有小于 \(n\) 且与 \(n\) 互质的和为 \(\frac{\varphi(n) \times n}{2}\)

性质选证

命题 \(1\)\(n = \sum_{d \mid n} \varphi (n)\)

\(n\) 分解质因数:

\[n = \prod_{i=1}^{k} p_i^{c_i} \]

\(\varphi(n)\) 是积性函数,故只需证:

\[p_i^{c_i}=\sum_{d \mid p_i^{c_i}} \varphi(d) \]

由:

\[\begin{aligned} \sum_{d \mid p_i^{c_i}} \varphi(d) &= \sum_{k=0}^{c_i} \varphi(p_i^{k}) \\ &= (\sum_{k=1}^{c_i} p_i^{k}-p_i^{k-1})+1 \\ &= p_i^{c_i} \end{aligned} \]

原命题得证。

命题 \(2\)\(\varphi(i,j)=\frac{\varphi(i) \varphi(j) \gcd(i,j)}{\varphi(\gcd(i,j))}\)

证明:

设 $$ i, j $$ 的最大公约数为 $$ d = \gcd(i, j) $$,则可将 $$ i, j $$ 分解为 $$ i = d \cdot a $$,$$ j = d \cdot b $$,其中 $$ \gcd(a, b) = 1 $$。此时 $$ ij = d^2 a b $$,需证明:

\[\varphi(ij) = \frac{\varphi(i) \varphi(j) \cdot d}{\varphi(d)}. \]

步骤 1:分解欧拉函数
由欧拉函数的积性,当 $$ \gcd(d^2, ab) = d $$(因为 $$ \gcd(a, b) = 1 $$),可得:

\[\varphi(ij) = \varphi(d^2 a b) = \varphi(d^2) \cdot \varphi(a) \cdot \varphi(b). \]

进一步分解 $$ \varphi(d^2) $$:

\[\varphi(d^2) = d^2 \prod_{p \mid d} \left(1 - \frac{1}{p}\right) = d \cdot \varphi(d). \]

步骤 2:关联 $$\varphi(i)$$ 和 $$\varphi(j)$$
计算 $$ \varphi(i) $$ 和 $$ \varphi(j) $$:

\[\varphi(i) = \varphi(d \cdot a) = \varphi(d) \cdot \varphi(a), \quad \varphi(j) = \varphi(d \cdot b) = \varphi(d) \cdot \varphi(b). \]

因此:

\[\varphi(i) \varphi(j) = \varphi(d)^2 \cdot \varphi(a) \cdot \varphi(b). \]

步骤 3:代入公式
将 $$ \varphi(ij) $$ 与 $$ \varphi(i)\varphi(j) $$ 结合:

\[\varphi(ij) = d \cdot \varphi(d) \cdot \varphi(a) \cdot \varphi(b) = \frac{\varphi(i) \varphi(j) \cdot d}{\varphi(d)}. \]

结论:
当 $$ i, j $$ 不互质时,欧拉函数满足:

\[\varphi(i \times j) = \frac{\varphi(i) \varphi(j) \gcd(i, j)}{\varphi(\gcd(i, j))}. \]

证毕。

计算

算法一,分解质因数

如何计算 \(\varphi (n)\),根据以上性质,先将 \(n\) 分解质因数,\(n = p_1^{c_1} p_2^{c_2} p_3^{c_3} \dots p_k^{c_n}\),那么有:

\[\begin{aligned} \varphi (n) &= \varphi (p_1^{c_1}) \varphi (p_2^{c_2}) \cdots \varphi (p_k^{c_k}) \\ &= p_1^{c_1}(1-\frac{1}{p_1})p_2^{c_2}(1-\frac{1}{p_2}) \cdots p_k^{c_k}(1-\frac{1}{p_k}) \\ &= n(1-\frac{1}{p_1})(1-\frac{1}{p_2}) \cdots (1-\frac{1}{p_k}) \\ &= n \ \prod_{i=1}^{k}(1- \frac{1}{p_i}) \end{aligned} \]

算法二,欧拉筛

观察到进行欧拉筛的时候,可以求出每个数的最小质因数.

于是考虑在筛的时候求,具体地:

\(i\) 为质数,\(\varphi (i)=i-1\)

否则设当前枚举到的质数为 \(p\),分两种情况:

\(i \equiv 0 \pmod p\),此时 \(i\) 包含了 \(i \times p\) 的所有因数,有:

\[\begin{aligned} \varphi (i \times p) &= i \times p \times \prod_{i=1}^{k}(1- \frac{1}{p_i}) \\ &= p \times \varphi(i) \end{aligned} \]

\(i \not \equiv 0 \pmod p\),有:

\[\begin{aligned} \varphi(i \times p) &= \varphi(i) \ \varphi(p) \\ &= (p-1) \times \varphi(i) \end{aligned} \]

代码:

int phi[maxn],prime[maxn],not_prime[maxn],cnt,sum[maxn];
void init(int n)
{
    phi[1]=1,not_prime[1]=1;
    for(int i=2;i<=n;++i)
    {
        if(!not_prime[i])
        {
            prime[++cnt]=i;
            phi[i]=i-1;
        }
        for(int j=1;j<=cnt&&prime[j]*i<=n;++j)
        {
            not_prime[i*prime[j]]=1;
            if(i%prime[j]==0)
            {
                phi[i*prime[j]]=phi[i]*prime[j];
                break;
            }
            else
            {
                phi[i*prime[j]]=phi[i]*(prime[j]-1);
            }
        }
    }
}

典型套路

一般看到关于 \(\gcd\) 的问题,可以先考虑欧拉函数能不能做,两种方式考虑问题:

  1. 考虑枚举 \(\gcd(i,j)\) 的值 \(d\),通过欧拉函数的定义化简。
  2. 欧拉反演,运用性质 \(n=\sum_{d \mid n} \varphi(n)\)

#1 gcd 运算的对称性

\(\gcd\) 运算具有对称性,即 \(\gcd(i,n)=\gcd(n-i,n)\)

于是有:

\[\begin{aligned} \sum_{i=1}^{n} \sum_{j=i+1}^{n} \gcd(i,j) &= \frac{(\sum_{i=1}^{n}\sum_{j=1}^{n} \gcd(i,j))-\gcd(i,i)}{2} \end{aligned} \]


#2 欧拉反演

\[\begin{aligned} \sum_{i=1}^{n}\gcd(i,n) &= \sum_{i=1}^n \sum_{d \mid \gcd(i,n)} \varphi(d) \\ &= \sum_{i=1}^{n} \sum_{d} [d \mid n][d\mid i] \ \varphi(d) \\ &= \sum_{d \mid n} \ \varphi(d) \sum_{i=1}^{n}[d \mid i] \\ &= \sum_{d \mid n} \lfloor \frac{n}{d} \rfloor \varphi(d) \end{aligned} \]

可以直接求解。

\[\begin{aligned} \sum_{i=1}^{n} \sum_{j=1}^{n} \gcd(i,j) &= \sum_{i=1}^{n} \sum_{j=1}^{n} \sum_{d \mid \gcd(i,j)} \varphi(d) \\ &= \sum_{i=1}^{n} \sum_{j=1}^{n} \sum_{d=1}^{n} \varphi(d)[d \mid i][d \mid j] \\ &= \sum_{d=1}^{n} \varphi(d) \sum_{i=1}^{n} [d \mid i] \sum_{j=1}^{n} [d \mid j] \\ &= \sum_{d=1}^{n} \varphi(n) {\lfloor \frac{n}{d} \rfloor}^{2} \end{aligned} \]

直接求时间复杂度 \(\Theta(n+qn)\),如果多组询问就爆了,可以使用数论分块,在 \(\Theta(n+q\sqrt n)\) 的时间求解。

同理上述过程还有:

\[\begin{aligned} \sum_{i=1}^{n} \sum_{j=1}^{m} \gcd(i,j) &= \sum_{d=1}^{\min (n,m)} \varphi(d) {\lfloor \frac{n}{d} \rfloor} {\lfloor \frac{m}{d} \rfloor} \end{aligned} \]


#3 套路

\[\begin{aligned} \sum_{i=1}^{n} \sum_{j=1}^{m} [\gcd(i,j)=k] &= \sum_{i=1}^{{\lfloor \frac{n}{k} \rfloor}} \sum_{j=1}^{{\lfloor \frac{m}{k} \rfloor}} [\gcd(i,j)=1] \end{aligned} \]

这一步变换主要用于莫比乌斯反演。

\(n=m\) 时,可以用欧拉函数进一步化简。


首先有等式:

\[\begin{aligned} \sum_{i=1}^{n}\sum_{j=1}^{n}[\gcd(i,j)=1] &= \sum_{i=1}^{n}(\sum_{j=1}^{i} [\gcd(i,j)=1] \times2 -1) \\ &= \sum_{i=1}^{n} \varphi(i)\times 2-1 \end{aligned} \]

故:

\[\begin{aligned} \sum_{i=1}^{n} \sum_{j=1}^{n} \gcd(i,j) &= \sum_{i=1}^{n} \sum_{j=1}^{n} \sum_{d=1}^{n} [\gcd(i,j)=d] \times d \\ &= \sum_{d=1}^{n} d \sum_{i=1}^{n} \sum_{j=1}^{n} [\gcd(\frac{i}{d},\frac{j}{d})=1] \\ &= \sum_{d=1}^{n} d \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor}[\gcd(i,j)=1] \\ &= \sum_{d=1}^{n} d (\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \varphi(i)\times2 -1) \end{aligned} \]

#4 与 n 互质的数的和

\(\sum_{i=1}^{n}i[\gcd(i,n)=1]\)

由欧几里得定理:

\[\gcd(i,n)= \gcd(n,n-i) \]

这说明与 \(n\) 互质的数一定成对出现,并且总和为 \(n\)

由于与 \(n\) 互质的数一定有 \(\varphi(n)\) 个,所以:

\[\sum_{i=1}^{n}i[\gcd(i,n)=1] = \frac{n \varphi(n)}{2} \]

特别地,\(n=1\) 时不成立,式子可以写成:

\[\sum_{i=1}^{n}i[\gcd(i,n)=1] = \frac{n \varphi(n) + [n=1]}{2} \]

#5 lcm 相关

\[\begin{aligned} \sum_{i=1}^{n} \operatorname{lcm} (i,n) &= \sum_{i=1}^n \frac{i \times n}{\gcd(i,n)} \\ &= n \sum_{d=1}^{n} \sum_{i=1}^{n} \frac{i}{d}[\gcd(i,n)=d] \\ &= n \sum_{d=1}^{n} \sum_{i=1}^{n} \frac{i}{d}[\gcd(\frac{i}{d},\frac{n}{d})=1] \\ &= n \sum_{d \mid n} \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} i[\gcd(i,\frac{n}{d})=1] \\ &= n \sum_{d \mid n} \sum_{i=1}^{d} i[\gcd(i,d)=1] \end{aligned} \]

后面的式子即求 \(1 \sim d\) 中与 \(d\) 互质的数的个数,用上文的性质计算即可。

时间复杂度 \(\Theta(n+q\sqrt n)\)

练习

P2303 [SDOI2012] Longge 的问题

P1891 疯狂 LCM

P2398 GCD SUM

P2158 [SDOI2008] 仪仗队

posted @ 2025-01-14 16:57  vanueber  阅读(38)  评论(0)    收藏  举报