欧拉函数

来源:互联网 发布:如何做淘宝链接 编辑:程序博客网 时间:2024/06/10 02:00

欧拉函数在数论中指的是,对于正整数N,小于或等于N ([1,N]),且与N互质的正整数(包括1)的个数,记作φ(n)。

以下是欧拉函数的模板


1,直接求φ(n)

int Euler(int n){    int ret=n;    for(int i=2;i<=sqrt(n);i++)     if(n%i==0)      {        ret=ret/i*(i-1);//先进行除法防止溢出(ret=ret*(1-1/p(i)))        while(n%i==0)          n/=i;     }    if(n>1)          ret=ret/n*(n-1);        return ret;}


2,通过素数表直接求φ(n)

int euler(int n){int res = n;for (int i = 1; i<=primesize&&prime[i] * prime[i] <= n; i++){if (n%prime[i] == 0){res = res / prime[i] * (prime[i] - 1);while (n%prime[i] == 0)n /= prime[i];}}if (n>1)res = res / n*(n - 1);return res;}


3,对欧拉函数用筛数法打表

#define size 1000001int euler[size];void Init(){     memset(euler,0,sizeof(euler));          euler[1]=1;     for(int i=2;i<size;i++)       if(!euler[i])       for(int j=i;j<size;j+=i)       {              if(!euler[j])               euler[j]=j;               euler[j]=euler[j]/i*(i-1);//先进行除法防止中间数据的溢出         }}


原创粉丝点击