欧拉函数总结

来源:互联网 发布:电子数据交换技术 编辑:程序博客网 时间:2024/06/06 02:11

欧拉函数可以直接打表,时间复杂度为O(nlognlogn);

<pre name="code" class="cpp">////  main.cpp//  Richard////  Created by 邵金杰 on 16/8/2.//  Copyright © 2016年 邵金杰. All rights reserved.//int euler(int n){    int ret=1;    for(int i=2;i*i<=n;i++)    {        if(n%i==0)        {            n/=i;ret*=i-1;            while(n%i==0) {n/=i;ret*=i;}        }    }    if(n>1) ret*=n-1;    return ret;}int euler_phi(int n){    int ans=n;    for(int i=2;i*i<=n;i++)    {        if(n%i==0){            ans=ans/i*(i-1);            while(n%i==0) n/=i;        }    }    if(n>1) ans=ans/n*(n-1);    return ans;}void phi_table(int n,int phi[]){    for(int i=1;i<=n;i++) phi[i]=0;    for(int i=2;i<=n;i++)    {        if(!phi[i])        {            for(int j=i;j<=n;j+=i)            {                if(!phi[j]) phi[j]=j;                phi[j]=phi[j]/i*(i-1);            }        }    }}


                                             
0 0
原创粉丝点击