欧拉函数

 

1~n中与n互质的数被称为欧拉函数。

怎么求欧拉函数呢 只要拿n减去与n不互质的数的个数就可以了

φ(n)=n*质数p|n(1-1/p)

 

欧拉函数的性质

1.任意n>1,1~n中与n互质的数之和为φ(n)*n/2

证明:gcd(n,x)=gcd(n,n-x) 所以与n互质的数x,n-x是成对出现的 两个数的平均值为n/2

2.若a,b互质,则φ(ab)=φ(a)φ(b)

3.若f是积性函数,且在算数基本定理中n=∏(pici) i=1~m,则f(n)=∏f(pici) i=1~m

积性函数:如果当a,b互质时,有f(ab)=f(a)*f(b),则称函数f为积性函数

4.若p|n且p2|n,则φ(n)=φ(n/p)*p

证明:由给定条件可知 n与n/p有相同的质因子只是p的指数不同

     按欧拉函数的计算公式写出来φ(n)/φ(n/p) 就是p

5.若p|n且p2不能被n整除,则φ(n)=φ(n/p)*φ(p)

证明:p与n/p互质 所以φ(n)=φ(n/p)*φ(p)

      若p为质数 φ(p)=p-1 即φ(n)=φ(n/p)*φ(p) φ(n)=φ(n/p)*(p-1)

 

 

板子题

[SDOI2008]仪仗队

#include<iostream>
#include<cstdio>
#include<cmath>
#define Rg register
#define go(i,a,b) for(Rg int i=a;i<=b;i++)
using namespace std;
int n,ans,phi[40010];
int el()
{
    go(i,1,n)phi[i]=i;
    go(i,2,n)
        if(phi[i]==i)
            go(j,1,n/i)
                phi[i*j]=phi[i*j]/i*(i-1);
}
int main()
{
    scanf("%d",&n);
    if(n==1){printf("0");return 0;}
    el();n--;
    go(i,2,n)ans+=phi[i]*2;
    printf("%d",ans+3);
    return 0;
}
View Code

 

posted @ 2019-03-12 19:14  DTTTTTTT  阅读(161)  评论(0编辑  收藏  举报