揭秘欧拉函数:定义、公式、Python 实现及复杂度分析
你描述的应该是欧拉函数。欧拉函数 $\varphi(n)$ 表示小于或等于正整数 $n$ 的数中与 $n$ 互质的数的个数。 欧拉函数的计算公式 如果将正整数 $n$ 分解质因数为 $n = p_{1}^{a_{1}}p_{2}^{a_{2}}\cdots p_{k}^{a_{k}}$,那么欧拉函数 $\varphi(n)=n\prod_{i = 1}^{k}(1-\frac{1}{p_{i}})$。 Python 代码实现 ```python def euler_phi(n): result = n p = 2 # 对 n 进行质因数分解 while p * p <= n: if n % p == 0: # 根据欧拉函数公式更新结果 result = result // p * (p - 1) while n % p == 0: n = n // p p = p + 1 # 如果 n 仍然大于 1,说明 n 本身是一个质数 if n > 1: result = result // n * (n - 1) return result # 读取输入 n = int(input()) # 计算并输出欧拉函数值 print(euler_phi(n)) ``` 代码解释 1. 函数 `euler_phi`:该函数接受一个正整数 `n` 作为参数,用于计算 $\varphi(n)$。 2. 质因数分解:从 $2$ 开始尝试对 $n$ 进行质因数分解,对于每个质因数 $p$,根据欧拉函数公式更新结果。 3. 处理剩余的质数:如果在质因数分解结束后,$n$ 仍然大于 $1$,说明 $n$ 本身是一个质数,需要再次更新结果。 4. 主程序:读取输入的正整数 $n$,调用 `euler_phi` 函数计算 $\varphi(n)$ 并输出结果。 复杂度分析 - 时间复杂度:$O(\sqrt{n})$,主要是因为质因数分解的时间复杂度为 $O(\sqrt{n})$。 - 空间复杂度:$O(1)$,只使用了常数级的额外空间。 ######[AI问答 | 514点数解答 | 2026-01-25 20:58:39]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- C 语言实现链表操作:创建、输出、删除及插入功能详解(字节豆包 | 534点数解答 | 2024-12-09 21:33:48)338
- C语言实现链表创建、输出、删除与插入操作的完整代码及注意要点(字节豆包 | 609点数解答 | 2024-12-18 12:18:21)358
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)458
- Java 实现:从点类到圆类,计算圆心坐标(50,30)、半径 4 的圆周长与面积(字节豆包 | 246点数解答 | 2024-11-11 16:36:30)335
- C++求解序列或与运算和差值:避O(nq)复杂度及数据处理要点(字节豆包 | 534点数解答 | 2025-10-17 20:05:07)60
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)414
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)405
- C++编程:冒泡排序函数模板、txtdata类与bindata类的实现及应用(GPT | 1551点数解答 | 2024-06-01 16:02:33)326
- C++:冒泡排序函数模板与文件读写类(txtdata、bindata)的实现及应用(GPT | 1941点数解答 | 2024-06-01 16:23:06)310
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310
- Java 实现:轻松生成 5 位数字、大小写字母混合验证码( | 266点数解答 | 2024-03-06 17:39:10)329