欧拉函数:通式:
![](https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D146/sign=972114bf49a98226bcc12f23bc80b97a/f3d3572c11dfa9ecf6f6c0dd68d0f703908fc124.jpg)
其中p1, p2……pn为x的所有质因数,x是不为0的整数。
φ(1)=1(和1
互质的数(小于等于1)就是1本身)。
注意:每种质因数只一个。 比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)=4
若n是质数p的k次幂,
,因为除了p的倍数外,其他数都跟n互质。
![](https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D211/sign=8a21a419ac18972ba73a07cbd7cd7b9d/f9198618367adab410da834e8cd4b31c8701e4b1.jpg)
设n为正整数,以 φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值
φ:N→N,n→φ(n)称为欧拉函数。
欧拉函数是
积性函数——若m,n互质,
![](https://gss3.bdstatic.com/-Po3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D140/sign=daa516337cec54e745ec1e1a89399bfd/bd3eb13533fa828b5d8406eefa1f4134970a5a1c.jpg)
特殊性质:当n为奇数时,
, 证明与上述类似。
![](https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D96/sign=52a5c55ef1246b607f0ebe72eaf8e29d/8cb1cb134954092331f8f8739558d109b3de492e.jpg)
若n为质数则
![](https://gss3.bdstatic.com/7Po3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D85/sign=31100df17bd98d1072d40134203fd0be/a5c27d1ed21b0ef404180353dac451da80cb3ece.jpg)
求单个数的欧拉函数
longlong eular(longlong n)
{
longlong 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) //n用n/=下来的n最后都有一个值,要加以考虑
ans -= ans/n; //这就是按第一个公式写的
return
ans;
}
筛法欧拉函数
int euler[3000001];
void getEuler()
{
memset(euler,0,sizeof(euler));
euler[1] = 1;
for(int i = 2;i <= 3000000;i++)
if(!euler[i])
for(int j= i;j <= 3000000; j += i)
{
if(!euler[j])
euler[j] = j;
euler[j] = euler[j]/i*(i-1);
}
}