poj 2407 欧拉函数裸题

http://poj.org/problem?id=2407

题意:多组数据,每次输入一个数 ,求这个数的欧拉函数

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);
}
单个欧拉函数
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
",euler_phi(n));
    }
}
原文地址:https://www.cnblogs.com/thmyl/p/6801369.html