poj 2407 欧拉函数裸题
http://poj.org/problem?id=2407
题意:多组数据,每次输入一个数 ,求这个数的欧拉函数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
int euler_phi(int n){//单个欧拉函数 int m=(int)sqrt(n+0.5); int ans=n; for(int i=2;i<=m;i++)if(n%i==0){ ans=ans/i*(i-1); while(n%i==0)n/=i; } if(n>1)ans=ans/n*(n-1); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
int phi[maxn]; void phi_table(int n){//函数表 for(int i=2;i<=n;i++)phi[i]=0; phi[1]=1; 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); } } }
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int n,m; int euler_phi(int n){ int m=(int)sqrt(n+0.5); int ans=n; for(int i=2;i<=m;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; } int main(){ while(cin>>n){ if(n==0)return 0; printf("%d\n",euler_phi(n)); } }