zoukankan      html  css  js  c++  java
  • 欧拉函数|降幂

    定义

        对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为Euler's totient function、φ函数、欧拉商数等。例如φ(8)=4,因为1,3,5,7均和8互质。

    内容

       通式:

       其中p1, p2……pn为x的所有质因数,x是不为0的整数。

    性质

        ① n的所有质因子之和是φ(n)*n/2。

       ② 若m,n互质,φ(m*n)=φ(m)*φ(n)。(欧拉函数是积性函数)

       ③ 若n为奇数,φ(2n)=φ(n)

       ④ 若n为质数,则φ(n)=n-1

       ⑤ 若n>2,则φ(n)是偶数。

       ⑥ 若p为质数,

          令a为N的质因子,则

        若(N%a==0&&(N/a)%a==0) 则有: φ(N)=φ(N/a)*a

        若(N%a==0&&(N/a)%a!=0) 则有: φ(N)=φ(N/a)*(a-1)

    实现

    根据公式

    int Euler(int n)
    {
      int res=n;
      for(int i=2;i*i<=n;i++)
      {
        if(n%i==0)  
        {
          res=res/i*(i-1);  
          while(n%i==0) n/=i; 
        }
      }
      if(n>1) res=res/n*(n-1);
      return res;
    }

    埃拉托斯特尼筛求欧拉函数

    int phi[maxn];
    void euler()  
    {  
      for(int i=2;i<maxn;i++)
      {  
        if(phi[i]) continue;  
        for(int j=i;j<maxn;j+=i)
        {  
          if(!phi[j]) phi[j]=j;  
          phi[j]=phi[j]/i*(i-1);  
        }  
      }  
    }

    欧拉筛求欧拉函数

    int phi[maxn],prime[maxn],top;
    bool isprime[maxn];
    void euler()  
    {
      phi[1]=1;
      memset(isprime,0,sizeof(isprime));
      for(int i=2;i<=maxn;i++)
      {
        if(!isprime[i])
        {
          prime[top++]=i;
          phi[i]=i-1;
        }
        for(int k=0;k<top&&i*prime[k]<=maxn;k++)
        {
          isprime[i*prime[k]]=1;
          if(i%prime[k]==0)
          {
            phi[i*prime[k]]=phi[i]*prime[k];
            break;
          }
          else phi[i*prime[k]]=phi[i]*(prime[k]-1);
        }
      }
    }

    欧拉降幂

    本博客仅为本人学习,总结,归纳,交流所用,若文章中存在错误或有不当之处,十分抱歉,劳烦指出,不胜感激!!!
  • 相关阅读:
    contest9 CF295 div1 ooxx? ooox? oooo?
    The 8KB bug
    简单消息框架
    示例页面
    Unity3d中角色模型和角色名字保持相对位置
    Unityd外发光Shader Lab
    Unity3D判断当前所在平台
    Unity3D中的shader基础知识
    Sql Server 分区
    MVC 使用缓存
  • 原文地址:https://www.cnblogs.com/VividBinGo/p/11395709.html
Copyright © 2011-2022 走看看