欧拉函数模板

来源:互联网 发布:淘宝每日好店在哪里看 编辑:程序博客网 时间:2024/05/22 10:27

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