欧拉函数总结
定义
欧拉函数,即 φ(n),表示小于等于 n 的数中与 n 互质的数的个数
性质
性质一
当 n 为质数时,
φ(n)=n−1
证明:过于显然。
性质二
当 n=pk 时,
φ(n)=(p−1)p(k−1)
证明:
φ(n)
=φ(pk)
=pk−ppk
=pk−p(k−1)
=(p−1)p(k−1)
性质三
欧拉函数是积型函数,即对于任意互质的 a 和 b,都有
φ(ab)=φ(a)×φ(b)
证明:我不会,日后再证。
性质四
设 n=p1k1p2k2...pnkn,则
φ(n)=n(1−p11)(1−p21)...(1−pk1)
证明:
由 φ 为积性函数及性质二,得:
φ(n)
=φ(p1k1)φ(p2k2)...φ(pnkn)
=(p1−1)p1(k1−1)(p2−1)p2(k2−1)...(pn−1)pn(kn−1)
=p1(p1−1)p1k1p2(p2−1)p2k2...pn(pn−1)pnkn
=n(1−p11)(1−p21)...(1−pk1)
性质五
设 n 为一个大于 2 的整数,则所有与互质的数的和为
2φ(n)×n
且 φ(n) 为偶数
证明:我懒,以后再写。
性质六
d∣n∑φ(d)=n
证明:
设 f(i,n) 表示 1∼n 中与 n 的最大公因数为 i 的数的个数,则显然:
f(1,n)+f(2,n)+f(3,n)+...+f(n,n)=n
若 i∤n,则 f(i,n) 显然为 0。
否则相当与求:
j=1∑n[gcd(j,n)=i]
化简后得:
j=1∑in[gcd(j,n)=1]
即 φ(in)
同理 φ(i) 也会加进去
故原式成立
性质七
若 p∣n 且 p2∣n 则 φ(n)=φ(pn)×p
若 p∣n 且 p2∤n 则 φ(n)=φ(pn)×(p−1)
证明:
设 n=pkp1k1p2k2...pnkn,则
φ(n)=n(1−p1)(1−p11)(1−p21)...(1−pk1)
若 p∣n 且 p2∣n(即 k⩾2) 则
φ(pn)=pn(1−p1)(1−p11)(1−p21)...(1−pk1)
显然 φ(n)=φ(pn)×p
这是欧拉函数能被筛的重要性质
性质八
若 a 与 m 互质,则
aφ(m)≡1(modm)
证明:
设 a1,a2,...aφ(m) 为小于等于 m 且与 m 互质的数,因为 a 与 m 互质,所以 aa1,aa2...aaφ(m) 互不相同且与 m 互质,所以 aa1,aa2...aaφ(m) 在 modm 意义下与 a1,a2,...aφ(m) 相等,所以
aa1×aa2...aaφ(m)≡a1a2...aφ(m)(modm)
aφ(m)(a1a2...aφ(m))≡a1a2...aφ(m)(modm)
所以
aφ(m)≡1(modm)
然后就结束了
求法
欧拉函数有两种求法,一种是用性质四求单个欧拉函数,一种是用性质七筛欧拉函数
单个欧拉函数
基于分解质因数
long long phi(long long n)
{
long long ph=n;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
ph=ph/i*(i-1);
while(n%i==0) n/=i;
}
}
if(n>1) ph=ph/n*(n-1);
return ph;
}
筛欧拉函数
基于线性筛,顺便还能筛个质数
long long phi[],prime[],idx;
bool isprime[];
void shai(long long n)
{
phi[1]=1;
for(int i=2;i<=n;i++)
{
if(!isprime[i])
{
prime[++idx]=i;
phi[i]=i-1;
}
for(int j=1;j<=idx&&prime[j]<=n/i;j++)
{
isprime[p[j]*i]=true;
if(i%prime[j]==0)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
phi[i*p[j]]=phi[i]*(prime[j]-1);
}
}
}