python 实现eulers totient欧拉方程算法

server/2024/11/15 0:48:03/

eulers totient欧拉方程算法介绍

欧拉函数(Euler’s Totient Function),通常表示为 𝜑(𝑛),是一个与正整数 𝑛相关的函数,它表示小于或等于 𝑛的正整数中与 𝑛 互质的数的数目。欧拉函数在数论和密码学中有广泛的应用。

欧拉函数的性质
1.**对于质数 𝑝,有 φ ( p ) = p − 1 ∗ ∗ φ(p)=p−1^{**} φ(p)=p1∗∗
2.**如果 𝑛是质数 𝑝 的 𝑘 次幂,即 n = p k n=p^k n=pk,则 φ ( n ) = p k − p k − 1 = p k − 1 ( p − 1 ) ∗ ∗ φ(n)=p^k−p^{k−1}=p^{k−1}(p−1)** φ(n)=pkpk1=pk1(p1)
3.**如果 𝑚和 𝑛是互质的,则 φ ( m n ) = φ ( m ) φ ( n ) ∗ ∗ φ(mn)=φ(m)φ(n)^{**} φ(mn)=φ(m)φ(n)∗∗
欧拉函数的计算
基于上述性质,我们可以设计一个算法来计算任意正整数 𝑛 的欧拉函数 𝜑(𝑛)。

算法步骤
质因数分解:首先,将 𝑛分解为质因数的乘积形式,即 n = p 1 e 1 ⋅ p 2 e 2 ⋯ p k e k n=p_{1}^{e1}⋅p_{2}^{e2}⋯p_{k}^{ek} n=p1e1p2e2pkek
应用欧拉函数的性质:根据性质 2,对于每个质因数 p i p_i pi,有 φ ( p i e i ) = p i e i − 1 ( p i − 1 ) φ(p_{i}^{ei})=p_{i}^{ei−1}(p_i−1) φ(piei)=piei1(pi1)
利用性质 3:由于 p 1 , p 2 , … , p k p_1,p_2,…,p_k p1,p2,,pk是互质的,所以 φ ( n ) = φ ( p 1 e 1 ) ⋅ φ ( p 2 e 2 ) ⋯ φ ( p k e k ) φ(n)=φ(p_{1}^{e1})⋅φ(p_{2}^{e2})⋯φ(p_{k}^{ek}) φ(n)=φ(p1e1)φ(p2e2)φ(pkek)
Python 实现

python">def euler_phi(n):phi = n# 遍历从2到sqrt(n)的所有数for i in range(2, int(n**0.5) + 1):if n % i == 0:# 根据性质更新phiphi = phi // i * (i - 1)# 如果i是n的因子,那么n//i也是n的因子,除非它们是同一个数while n % i == 0:n //= i# 如果n此时已经是质数,则直接返回phi*(n-1)if n == 1:break# 如果n此时大于1,说明n是质数if n > 1:phi = phi // n * (n - 1)return phi# 测试
print(euler_phi(10))  # 输出 4
print(euler_phi(20))  # 输出 8

这个算法首先尝试找到 𝑛的所有质因数,并应用欧拉函数的性质来逐步计算 𝜑(𝑛)。注意,在遍历过程中,如果 𝑛 能被 𝑖整除,我们就更新 𝑛 和 𝜑(𝑛),直到 𝑛变为 1 或 𝑖超出 𝑛的平方根。如果最后 𝑛 大于 1,说明 𝑛 是一个质数,我们还需要再应用一次性质 1 来更新 𝜑(𝑛)。

python_40">eulers totient欧拉方程算法python实现样例

欧拉函数(Euler’s totient function)是一个数论函数,表示小于等于n的正整数中与n互质的数的个数。可以通过欧拉函数来求解模数为n的群的个数。

欧拉函数的计算公式为:

φ(n) = n * (1 - 1/p1) * (1 - 1/p2) * ... * (1 - 1/pk)

其中p1, p2, …, pk 是 n 的所有质因数。

下面是一个用 Python 实现欧拉函数的算法

python">def euler_totient(n):phi = np = 2while p * p <= n:if n % p == 0:while n % p == 0:n //= pphi -= phi // pp += 1if n > 1:phi -= phi // nreturn phi

这个算法的时间复杂度是 O(sqrt(n)),其中 n 是给定的数。

使用示例:

python">n = 10
result = euler_totient(n)
print(f"φ({n}) = {result}")

输出结果为:

φ(10) = 4

这表示小于等于 10 的正整数中与 10 互质的数的个数为 4。


http://www.ppmy.cn/server/119269.html

相关文章

HX711电子秤模块详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 hx711.h文件 hx711.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 HX711是一种高精度、低成本的压力传感器信号放大器&#xff0c;主要用于测量重力或压力变化。…

分享几种方式获取免费精致的Live2d模型

文章目录 1、 Live2D官方示例数据集&#xff08;可免费下载&#xff09;2、模之屋3、unity商店4、直接b站搜索5、youtube6、BOOTH完结 1、 Live2D官方示例数据集&#xff08;可免费下载&#xff09; 官方提供了一些 Live2D实例模型给大家下载使用 地址&#xff1a;https://ww…

Gartner发布报告揭秘微软数据安全功能和许可

制定数据安全计划以增强合规性并降低数据风险仍然是安全和风险管理领导者关注的问题。这项研究阐明了 Microsoft 的数据安全许可结构&#xff0c;并确定了围绕 Purview 构建数据安全计划的关键要素。 主要发现 客户对微软数据安全的询问表明&#xff0c;安全和风险管理 (SRM) 领…

《拿下奇怪的前端报错》:nvm不可用报错`GLIBC_2.27‘‘GLIBCXX_3.4.20‘not Found?+ 使用docker构建多个前端项目实践

有些前端的小伙伴可能会好奇&#xff0c;nvm是什么&#xff1f;这里接简单介绍下&#xff0c;它是一个Nodejs版本管理工具。为什么需要它呢&#xff1f;当然是需要多个Nodejs版本的时候&#xff0c;那什么时候需要多个Nodejs版本&#xff1f;那肯定是在有点年头的公司了&#x…

系统 IO

"裸奔"层次&#xff1a;不带操作系统的编程 APP(应用程序) -------------------------------- Hardware(硬件) 特点&#xff1a;简单&#xff0c;应用程序直接操作硬件(寄存器) 缺点&#xff1a; 1. 搞应用开发的必须要了解硬件的实现细节&#xff0c;能够看懂原理图…

从Apple Intelligence到IoT Intelligence,端侧生成式AI时代加速到来

9月10日凌晨1点&#xff0c;苹果新品发布会如期举行&#xff0c;全新iPhone16系列成为苹果生态中真正意义上的第一款原生AI手机&#xff0c;在第二代3nm工艺A18和A18 Pro芯片的加持下&#xff0c;iPhone16系列能够容纳并快速运行以Apple Intelligence为中心的生成式AI功能在手机…

校验(网络传输)

1. 校验&#xff08;Checksum&#xff09; 定义&#xff1a;校验和是一种简单的错误检测机制&#xff0c;通过对数据块中的所有字节进行求和来生成一个固定大小的值。发送方计算校验和并将其附加到数据中&#xff0c;接收方在接收数据后重新计算校验和进行比较。 应用&#xff…

功能测试干了三年,快要废了。。。

8年前刚进入到IT行业&#xff0c;到现在学习软件测试的人越来越多&#xff0c;所以在这我想结合自己的一些看法给大家提一些建议。 最近聊到软件测试的行业内卷&#xff0c;越来越多的转行和大学生进入测试行业&#xff0c;导致软件测试已经饱和了&#xff0c;想要获得更好的待…