码迷,mamicode.com
首页 > 其他好文 > 详细

POJ2407---Relatives(求单个数的欧拉函数)

时间:2015-06-04 22:54:18      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:欧拉函数

Description
Given n, a positive integer, how many positive integers less than n are relatively prime to n? Two integers a and b are relatively prime if there are no integers x > 1, y > 0, z > 0 such that a = xy and b = xz.

Input
There are several test cases. For each test case, standard input contains a line with n <= 1,000,000,000. A line containing 0 follows the last case.

Output
For each test case there should be single line of output answering the question posed above.

Sample Input

7
12
0

Sample Output

6
4

Source
Waterloo local 2002.07.01

求单个数的欧拉函数

/*************************************************************************
    > File Name: POJ2407.cpp
    > Author: ALex
    > Mail: zchao1995@gmail.com 
    > Created Time: 2015年06月04日 星期四 18时18分05秒
 ************************************************************************/

#include <functional>
#include <algorithm>
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <queue>
#include <stack>
#include <map>
#include <bitset>
#include <set>
#include <vector>

using namespace std;

const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
const double eps = 1e-15;
typedef long long LL;
typedef pair <int, int> PLL;

int getphi(int n) {
    int ans = n;
    for (int i = 2; i * i <= n; ++i) {
        if (n % i == 0) {
            ans -= ans / i;
            while (n % i == 0) {
                n /= i;
            }
        }
    }
    if (n > 1) {
        ans -= ans / n;
    }
    return ans;
}

int main() {
    int n;
    while (~scanf("%d", &n), n) {
        printf("%d\n", getphi(n));
    }
    return 0;
}

POJ2407---Relatives(求单个数的欧拉函数)

标签:欧拉函数

原文地址:http://blog.csdn.net/guard_mine/article/details/46365413

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!