欧拉函数模板

1、直接求欧拉函数,返回N的欧拉函数值


#include <iostream>

using namespace std;

int euler(int 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;
}


int main()
{
    int n;
    cin>>n;
    cout<<euler(n)<<endl;

    return 0;
}


2、筛法求欧拉函数,返回1-N之间所有的欧拉函数值,保存到euler[i]中


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);//先进行除法是为了防止中间数据的溢出     
}


原文地址:https://www.cnblogs.com/bryce1010/p/9387119.html