题目链接:https://www.acwing.com/problem/content/description/875/
时/空限制:1s / 64MB

题目描述

给定n个正整数ai,请你求出每个数的欧拉函数。

欧拉函数的定义

1 ~ N 中与 N 互质的数的个数被称为欧拉函数,记为ϕ(N)。
若在算数基本定理中,,则:

输入格式

第一行包含整数n。

接下来n行,每行包含一个正整数ai。

输出格式

输出共n行,每行输出一个正整数ai的欧拉函数。

数据范围

1≤n≤100,
1≤ai≤2∗10^9

输入样例

3
3
6
8

输出样例

2
2
4

解题思路

题意:求一个数的欧拉函数。
思路:直接套用上面的公式就行了,注意最后n不为1的情况,证明最后这个n也是它的质因子。

Accepted Code:

/* 
 * @Author: lzyws739307453 
 * @Language: C++ 
 */
#include <bits/stdc++.h>
using namespace std;
int Euler(int n) {
    int cnt = n;
    for (int i = 2; i <= n / i; i++) {
        if (!(n % i)) {
            cnt = cnt / i * (i - 1);
            while (!(n % i))
                n /= i;
        }
    }
    if (n > 1)
        cnt = cnt / n * (n - 1);
    return cnt;
}
int main() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        int x;
        scanf("%d", &x);
        printf("%d\n", Euler(x));
    }
    return 0;
}