定义:欧拉函数是小于n的数中与n互质的数的数目。例如φ(8)=4,因为1,3,5,7均和8互质。
欧拉函数的通式为$φ(x)=x (1-\left(\frac{1}{p1}\right))(1-\left(\frac{1}{p2}\right))…(1-\left(\frac{1}{pk}\right))$:,其中pi表示x的质因数。
特别声明,φ(1)=1。
注意:每种质因数只一个。比如$12=223$那么$φ(12)=12(1-\left(\frac{1}{2}\right))(1-\left(\frac{1}{3}\right))=4$
其中还有比较特殊的几个。
- 若p为质数,$n=p^k$ ,则$φ(n)=p^k-p^k-1$ 。
- 如果n是奇数,那么$φ(2n)=φ(n)$
- 如果n是质数,那么,$φ(n)=n-1$ ,即所有小于n的数都与他互质。
- $φ(ab)=φ(a)φ(b)$
- 如果i%p==0,那么,$φ(ip)=φ(i)p$;
计算时$phi(x)=x(1-\left(\frac{1}{p1}\right))…(1-\left(\frac{1}{pi}\right))$中的x(1-1/pi)可以转化为x/pi*(pi-1)用来避免小数的产生,同时先除后乘可以避免溢出。
单个欧拉函数
1 | void euler(int n) |
线性筛
思想:保证每个合数只会被他的最小之质因子筛去。
1 | void euler(int n) |