题解:AcWing 873 欧拉函数

【题目来源】

AcWing:873. 欧拉函数 - AcWing题库

【题目描述】

给定 \(n\) 个正整数 \(a_i\),请你求出每个数的欧拉函数。

【输入】

第一行包含整数 \(n\)

接下来 \(n\) 行,每行包含一个正整数 \(a_i\)

【输出】

输出共 \(n\) 行,每行输出一个正整数 \(a_i\) 的欧拉函数。

【输入样例】

3
3
6
8

【输出样例】

2
2
4

【解题思路】

image

【算法标签】

《AcWing 873 欧拉函数》 #数学知识# #欧拉函数#

【代码详解】

#include <bits/stdc++.h>
using namespace std;

// 定义欧拉函数,计算小于等于n且与n互质的数的个数
int oula(int n)
{
    int res = n; // 初始化结果为n
    for (int i = 2; i <= n / i; i++) // 遍历从2到sqrt(n)的所有整数
    {
        if (n % i == 0) // 如果i是n的因子
        {
            res = res / i * (i - 1); // 更新结果,使用欧拉函数公式
            while (n % i == 0) n /= i; // 将n中所有i的因子去除
        }
    }
    if (n > 1) res = res / n * (n - 1); // 如果n大于1,说明n本身是一个质数,更新结果
    return res; // 返回最终结果
}

int main()
{
    int n;
    cin >> n; // 读取输入的整数n,表示接下来要处理的数的数量
    while (n--) // 循环n次
    {
        int a;
        cin >> a; // 读取每个数a
        cout << oula(a) << endl; // 计算并输出a的欧拉函数值
    }
    return 0; // 程序结束
}

【运行结果】

3
3
2
6
2
8
4
posted @ 2026-02-23 08:46  团爸讲算法  阅读(0)  评论(0)    收藏  举报