积性函数的证明: gcd(m,n)=1,m,n没有公因子.所以:
phi(n)=n(1-p/1)(1-q/1)…(1-k/1)
phi(m)=m(1-s/1)(1-r/1)……(1-j/1)
phi(nm)= n m (1-p/1) (1-q/1)…(1-k/1) * ( 1-s/1)(1-r/1)……(1-j/1)。
线性求欧拉函数:
void getphi()//线性素数筛+欧拉筛.
{
phi[1]=1;
for(int i=2;i<=N-5;++i)
{
if(!is[i]){prime[++tot]=i,phi[i]=i-1;}
for(int j=1;j<=tot;++j)
{
if(i*prime[j]>N) break;
is[i*prime[j]]=1;
if(i%prime[j]==0)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else
phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
}
代码解释:
1.第17行利用欧拉函数是积性函数。
gcd(i,prime[j])=1.(prime[j]为质数&&i%prime[j]!=0 又prime[j]=j-1。
2.第13行利用积性函数以及phi(p^k) = p^k- p^(k-1)=(p-1)* p^(k-1).(p是质数)
常考内容:
1.两个质数a<b之间的数x,则phi(x)<=phi(a)&&phi(x)<phi(b).(第一个等号是否可取 未知。。。) emm打表看出来的…
2.所以phi(X)>=Y,X最小是Y之后的第一个质数N。因为设Y前一个质数为M,(M,N)之间的数a,phi(a)<=phi(M)=M-1<Y,所以这之间的数a,phi(a)<Y。
又N满足phi(N)=N-1>=X。所以得证N就是满足条件的最小的数。