欧拉函数模板

来源:互联网 发布:js img.value 编辑:程序博客网 时间:2024/05/21 19:27

找了几篇大佬的板子,觉得这个最舒服,不过忘了是谁的了。。。
在这里存一下。。。

//直接求解欧拉函数  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;  }  //筛选法打欧拉函数表   #define Max 1000001  int euler[Max];  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);  }