【学习笔记】欧拉函数

房东的猫 提交于 2019-12-04 06:37:00

以下的除法,如果不是特殊说明,都是整数运算中的整除。

1 关于欧拉函数\(\varphi\)

\(\varphi(x)\)是欧拉函数,表示的是\([1,x]\)中和\(x\)互质的数的个数。
\[ \varphi(x)=x\times \Pi_{p\in prime,p|x}(1-\frac 1p) \]
以上的证明:(用归纳证明)

\(p,q\in prime,p|x,q|x\),那么在\([1,x]\)中是\(p\)\(q\)的倍数的个数分别为\(\frac xp\)\(\frac xq\)

那么存在于\([1,x]\)中是\(p\)或者\(q\)的倍数的个数为\(\frac xp+\frac xq-\frac x{pq}\)。(这一步用到了容斥原理)

那么\(\varphi(x)\)也就是和\(p,q\)同时不互质的数的个数为\(x-\frac xp-\frac xq+\frac x{pq}\)

整一下上式得到\(x\times (1-\frac xp-\frac xq+\frac x{pq})=x\times (1-\frac 1p)\times(1-\frac 1q)\)

归纳一下就可以得到\(\varphi\)的计算式了。

对于上式推导式,可以用暴力求,时间复杂度为\(O(\sqrt n)\)

int phi(int x) {
  int res = x;
  for (int i = 2; i * i <= x; i++) {
    if (x % i == 0) {
      res = res / i * (i - 1);
      while (x % i == 0) 
        x /= i;
    }
  }
  if (x > 1)
    res = res / x * (x - 1);
}

2 关于欧拉函数\(\varphi\)的性质

2.1 性质1

\(\forall x\in prime\)\(\varphi(x)=x-1\)

证明:

直接将\(x\in prime\)代入计算式就可以了。

2.2 性质2

积性函数:对于\(gcd(x1,x2)=1\)\(\varphi(x1\times x2)=\varphi(x1)\times \varphi(x2)\)

证明:
\[ \varphi(x1\times x2)=x1\times x2\times \Pi_{p\in prime,p|x1\times x2}(1-\frac 1p) \]
因为\(x1\)\(x2\)互质,所以对于在\(\Pi_{p\in prime,p|x1\times x2}(1-\frac 1p)\)中的所有的质因数都是独立的。

所以\(\varphi (x1\times x2)=x1\times \Pi_{p\in prime|x1}(1-\frac 1p)\times x2\times \Pi_{p\in prime|x2}(1-\frac 1p)=\varphi(x1)\times \varphi(x2)\)

2.3 性质3

以下的性质和欧拉函数的欧拉筛求法有关。

对于\(p\in prime,p|x,p^2|x\),那么$\varphi(x)=\varphi(\frac xp)\times p $。

证明:

首先这个不能用积性函数的方法证明。

1.\(\varphi(x)=x\times \Pi_{p\in prime,p|x}(1- \frac 1p)\)

2.\(\varphi(\frac xp)=\frac xp\times \Pi_{p\in prime,p|\frac xp}(1-\frac 1p)\)

因为\(p^2|x\),所以两式的右半边都是相等的。(\(p\)的指数\(>1\),所以就算\(/p\)之后还是有\(p\)这个质因子的)

所以两式相处可以得到\(\frac {\varphi(x)}{\varphi(\frac xp)}=p\),得证。

对于\(p\in prime,p|x,p^2\not|x^2\),那么\(\varphi(x)=\varphi(\frac xp)\times (p-1)\)

证明:

这个可以用积性函数的性质证明。

这个条件就说明了\(x\)\(\frac xp\)是互质的,那么\(\varphi(x)=\varphi(\frac xp)\times \varphi(p)\)

因为\(p\in prime\),所以\(\varphi(x)=\varphi(\frac xp)\times (p-1)\)

利用以上的两个积性函数的性质,我们就可以用欧筛将欧拉函数在\(O(n)\)的时间筛出来。

void getPrime(int n) {
  for (int i = 2; i <= n; i++) {
    if (!ntPrime[i]) 
      prime[++primeCnt] = i, phi[i] = i - 1;
    for (int j = 1; j <= primeCnt && i * prime[j] <= n; j++) {
      ntPrime[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);
    }
  }
}

2.4 性质4

\(\forall n>1\)\([1,n]\)中和\(n\)互质的数的和是\(\frac {n\times \varphi(n)}2\)

证明:

因为\(gcd(n,x)=gcd(n,n-x)\),所以和\(n\)不互质的数,\(x\)\(n-x\)是成对出现,均值为\(\frac n2\)

出现的次数一共是\(\varphi(n)\)次,那么总和就是\(\frac {n\times \varphi(n)}2\)

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