poj2407 Relatives ——欧拉函数入门题

April 22, 2013
POJ Math

题目链接:http://poj.org/problem?id=2407 题目大意:   这个题目就是欧拉函数的定义,求一个数字的欧拉函数。 题目思路:   用公式:φ(n) = n * (1-1/p1) * (1-1/p2) * ……  * (1-1/pk)。


#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <cmath>
#include <algorithm>
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
using namespace std;
typedef long long int LL;
const int MAXN =  0x3f3f3f3f;
const int  MIN =  -0x3f3f3f3f;
const double eps = 1e-9;
const int dir[8][2] = {{0,1},{1,0},{0,-1},{-1,0},{-1,1},
  {1,1},{1,-1},{-1,-1}};

int main(void){
#ifndef ONLINE_JUDGE
  freopen("poj2407.in", "r", stdin);
#endif
  LL n;
  while (~scanf("%lld", &n)){
    if (!n) break;
    LL ans = n;
    for (LL i = 2; i * i <= n; ++i){
      if (!(n%i)){
        ans = ans - ans / i;
        while (!(n%i)){
          n /= i;
        }
      }
    }
    if (n > 1) { ans = ans - ans / n; }
    printf("%lld\n", ans);
  }

  return 0;
}

  写代码要规范,优先级什么的,比如刚开始就写成了 !n%i这是不对的,优先级搞错了,应该加括号。  

comments powered by Disqus