POJ2407 欧拉函数入门裸题 xingxing在努力

题意直接求和n互质的数的个数, 直接上代码

 

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;

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()
{
    int n;
    while(scanf("%d", &n) == 1 && n)
    {
        printf("%d\n", euler_phi(n));
    }
    return 0;
}

 

posted @ 2015-11-09 21:42  xing-xing  阅读(96)  评论(0)    收藏  举报