poj 2407Relatives 欧拉函数

来源:互联网 发布:淘宝卖家评价举报功能 编辑:程序博客网 时间:2024/05/20 11:24

                                                                                                                    欧拉函数

 φ函数的值  Euler函数 
通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn) 
其中p1, p2……pn为x的所有质因数,x是不为0的整数 
φ(1)=1(唯一和1互质的数就是1本身)【注意:每种质因数只一个。比如12=2*2*3】 

定理: 
若n是素数p的k次幂,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟n互质 
欧拉函数是积性函数——若m,n互质,φ(mn)=φ(m)φ(n)
 

特殊性质:当n为奇数时,φ(2n)=φ(n), 证明于上述类似 
特殊地,p是素数,φ(p) = p - 1,φ(p)称为p的欧拉值
 
 欧拉公式的延伸:一个数的所有质因子之和是euler(n)*n/2。

//直接求解欧拉函数  int euler(int n){ //返回euler(n)        int res=n,a=n;       for(int i=2;i*i<=a;i++){           if(a%i==0){               res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出                while(a%i==0) a/=i;           }       }       if(a>1) res=res/a*(a-1);       return res;  }    //筛选法打欧拉函数表   #define Max 1000001  int euler[Max];  void Init(){        euler[1]=1;       for(int i=2;i<Max;i++)         euler[i]=i;       for(int i=2;i<Max;i++)          if(euler[i]==i)             for(int j=i;j<Max;j+=i)                euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出   }  

poj 2407 就是直接求解法。

0 0
原创粉丝点击