定义:1~N中与N互质的数的个数,记为(varphi (N) 或 phi(N))
积性函数:如果当a,b互质,有f(ab)=f(a)*f(b),则称函数f是积性函数。
性质
- 欧拉函数是积性函数(这里写得更好https://www.zhihu.com/question/410737433)
证明:
引理:
证毕
2.(varphi(1)=1,varphi(p)=p-1,p是素数)
3.欧拉函数计算式
因此,我们可以得出快速求某个数n欧拉函数值的方法,对n进行质因数分解,下面是模板
inline int phi(int n) {
int ans = n;
int t = sqrt(n);
rep(i, 2, t) {
if(n % i == 0) {
ans = ans / i * (i - 1);
while(n % i == 0) n /= i;
}
if(n > 1) ans = ans / n * (n - 1);
return ans;
}
}
4.(forall n>1,1~n中与n互质的数和为n * varphi(n)/2)
证明:
因为gcd(n,x)=gcd(n,n-x),所以与n不互质的数x,n-x是成对出现的,平均值为n/2,因此,与n互质的数的平均值也是n/2,共(varphi(n))个。
证毕
- 若p|n,且(p^2|n,则varphi(n)=varphi(n/p)*p)
证明:
因为p|n,(p^2|n) ,所以n,n/p包含了相同的质因子(p^?),只是指数不同。将$ varphi(n),varphi(n/p) 按照欧拉函数计算式写出,相除的商为p$
证毕
6.若p|n且(p^2
mid n ,则varphi(n)=varphi(n/p)*(p-1))
证明:
若p|n且(p^2
mid n),所以p和n/p互质,所以(varphi(n)=varphi(n/p)*varphi(p),varphi(p)=p-1)
证毕
7. $$ sum_{d|n}varphi(d)=n $$
证明:
设
(f(n)=sum _{d|n}varphi(d))
设m,n互质,则有
(f(nm)=sum _{d mid nm} varphi(d) =sum _{a|n,b|m} varphi(ab)=sum _{a|n,b|m} varphi(a) varphi(b)=( sum _{a|n} varphi(a) ) * ( sum _{b|m} varphi(b) ))
所以f(n)也是积性函数。对于单个质因子(f(p^m)=sum _{d|p^m} varphi(d)=varphi(1)+varphi(p)+varphi(p^2)+cdots+varphi(p^m))
是一个等比数列求和后再加1,公比为p。结果为(p^m)。所以(f(n)=prod _{i=1}^{m}f(p_i^{c_i})=prod _{i=1}^{m}p_i^{c_i}=n)
得证
8.若n为奇数,(varphi(2n)=varphi(n))。
证明:因为n为奇数,所以(n perp 2 ,varphi(2n)=varphi(n)*varphi(2),而varphi(2)=1)
证毕
求法:1.分解质因数,上文有写
2.适用与求[1,N]中所有数的欧拉函数值,用质数筛的思想
(1)埃氏筛,时间复杂度O(N log N)
inline void Euler(int n){
rep(i,1,n) phi[i]=i;
rep(i,2,n){
if(phi[i]==i)// i是质数,
{
for(register int j(i);j<=n;j+=i)
phi[j]=phi[j]/i*(i-1);
}
}
}
(2)欧拉筛,我们可以根据性质5和6来边进行欧拉筛边计算被筛除的数的欧拉函数值,时间复杂度为O(N)
int v[MAXX], prime[MAXX], phi[MAXX], cnt;
inline void EulerSieve(int N) {
memset(v, 0, sizeof v); //最小质因子
cnt = 0;
phi[1]=1;
rep(i, 2, N) {
if(!v[i]) {
v[i] = i;
prime[++cnt] = i;
phi[i] = i - 1;
}
rep(j, 1, cnt) {
if(prime[j] > v[i] || 1ll * prime[j]*i > 1ll * N) break;
v[i * prime[j]] = prime[j];
phi[i * prime[j]] =phi[i]* (i % prime[j] ? prime[j] - 1 : prime[j] );
}
}
}
欧拉反演
(以下公式和部分内容搬运于粉兔,自己懒得打了,加了点注释)
利用上面性质7
,我们可以有
设
所以可以继续化简
最后
模板题和代码见P2303 [SDOI2012] Longge 的问题