浅谈欧拉函数

自作多情 提交于 2019-11-29 16:02:00

介绍

欧拉函数是小于 \(x\) 的整数中与 \(x\) 互质的数的个数,一般用 \(\varphi(x)\) 表示。特殊的, \(\varphi(1)=1\)

内容

通式:\(\varphi(x)=x\prod_{i=1}^n{1-\frac{1}{p_i}}\)

其中, \(p_1,p_2...p_n\)\(x\) 的所有质因数, \(x\in N^*\)

性质

  1. 对于质数 \(p\) , \(\varphi(p)=p-1\)
  2. \(p\) 为质数,\(n=p^k\) ,则 \(\varphi(n)=p^k-p^{k-1}\)
  3. 欧拉函数是积性函数,但不是完全积性函数。若 \(m,n\) 互质,则 \(\varphi(m*n)=\varphi(m)*\varphi(n)\) 。特殊的,当 \(m=2,n\) 为奇数时, \(\varphi(2*n)=\varphi(n)\)
  4. \(n>2\) 时, \(\varphi(n)\) 是偶数。
  5. 小于 \(n\) 的数中,与 \(n\) 互质的数的总和为 \(\varphi(n)*n/2 \ \ \ (n>1)\)
  6. \(n=\sum_{d|n}\varphi(d)\) ,即 \(n\) 的因数(包括1和它本身)的欧拉函数之和为 \(n\)

容斥原理求欧拉函数

  • \(N\) 分解为不同素数的乘积,即:

    \[N=p_1^{r_1}*p_2^{r_2}*p_3^{r_3}*...*p_k^{r_k}\]

  • \(1\)\(N\)\(N\) 个数中为 \(p_i\) 倍数的集合为 \(A_i\) ,则有 \(|A_i|=\lfloor\frac{N}{p_i}\rfloor\) \((i=1,2,3,..,k)\)

  • 对于 \(p_i\not=p_j\)\(A_i\cap A_j\) 既是 \(p_i\) 的倍数也是 \(p_j\) 的倍数,即可得 \(|A_i\cap A_j|=\lfloor\frac{N}{p_ip_j}\rfloor\) \((1\le i,j \le k,i\not=j)\)

  • \[\begin{split} \varphi(N) &=|A_1\cap A_2 \cap A_3 \cap ... \cap A_k|\\ &=N-(\frac{N}{p_1}+\frac{N}{p_2}+...+\frac{N}{p_k})+(\frac{N}{p_1p_2}+\frac{N}{p_2p_3}+...+N)...\pm(\frac{N}{p_1p_2...p_k})\\ &=N(1-\frac{1}{p_1})(1-\frac{1}{p_2})...(1-\frac{1}{p_k}) \end{split}\]

算法实现

时间复杂度:\(O(\sqrt{n})\)

int euler_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;
}

参考

blog

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!