浅谈欧拉函数
Posted baihualiaoluan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈欧拉函数相关的知识,希望对你有一定的参考价值。
欧拉函数
一.简介
我们定义一种函数φ(x),它的值为比x小的数里与x互质的数的个数。
其计算公式是 (其中p1, p2……pn为x的所有质因数,x是不为0的整数)。
定义φ(1) = 1。
这个公式可以这样理解,对于整数x的任何一个素因子pi,在1-n中,它的倍数的个数为x/pi,剩下的数就是x*(1-1/pi)个。至于为什么用的连乘而不是连加,这个跟容斥有关系,有的数可能同时是多个素因子的乘积,可能被多次计算,在此不做证明。
二.代码实现
求单个数的欧拉函数
typedef long long LL; LL eular(LL n) { LL ans = n; for(int i = 2;i*i<=n;++i) { if(n%i==0) { ans-=ans/i; while(n%i==0) n/=i; } } if(n>1) ans-=ans/n; return ans; }
欧拉函数打表
//线性筛(同时得到欧拉函数和素数表) const int maxn = 1e7; bool check[maxn+10]; int phi[maxn+10]; int prime[maxn+10]; int tot;//素数个数 void phi_and_prime_table(int N) { memset(check,false,sizeof(check)); phi[1] =1; tot =0; for(int i =2;i<=N;++i) { if(!check[i]) { prime[tot++] = i; phi[i] = i-1; } for(int j = 0;j<tot;++j) { if(i*prime[j]>N) break; check[i*prime[j]] = true; if(i%prime[j]==0) { phi[i*prime[j]] = phi[i]*prime[j]; break; } else phi[i * prime[j]] = phi[i] * (prime[j]-1); } } }
三.欧拉函数的性质
- 对于一个素数p,φ(p ) = p -1。
- 欧拉函数是积性函数,但不是完全积性函数,所以仅对两个互质的数p,q,φ(pq) =φ(p)*φ(q)。
- N>1,不大于N且与N互素的所有正整数的和是φ(N)*N/2。
- 若p为质数,n = pk,则φ(n) = pk - pk-1
- 当m =2 ,n,m互质且n为奇数时,φ(2*n) = φ(n)。
- 当n>2时,φ(n)是偶数
- n的因数(包括1和他自己)的欧拉函数之和等于n
四.相关习题
以上是关于浅谈欧拉函数的主要内容,如果未能解决你的问题,请参考以下文章