当前位置: 首页 > article >正文

【算法】 欧拉函数与欧拉降幂 python


欧拉函数


欧拉函数 ϕ ( n ) \phi(n) ϕ(n) 表示小于等于 n 的正整数中与 n 互质的数的个数。即:

ϕ ( n ) = ∣ { k ∈ Z + ∣ 1 ≤ k ≤ n , gcd ⁡ ( k , n ) = 1 } ∣ \phi(n) = \left| \{ k \in \mathbb{Z}^+ \mid 1 \leq k \leq n, \gcd(k, n) = 1 \} \right| ϕ(n)={kZ+1kn,gcd(k,n)=1}

当  n 是质数的时候,显然有  φ ( n ) = n − 1 。 \text{当 }n\text{ 是质数的时候,显然有 }\varphi(n)=n-1\text{。}  n 是质数的时候,显然有 φ(n)=n1

若  n = p k ,其中  p 是质数,那么  φ ( n ) = p k − p k − 1 。 \text{ 若 }n=p^k\text{,其中 }p\text{ 是质数,那么 }\varphi(n)=p^k-p^{k-1}。   n=pk,其中 p 是质数,那么 φ(n)=pkpk1


求一个数的欧拉函数值,在质因数分解的同时求:

from math import isqrt  
def euler_phi(n):  if n == 1:  return 1  else:  phi = n  max_n = isqrt(n)  for i in range(2, max_n + 1):  if n % i == 0:  phi -= phi // i  while n % i == 0:  n //= i  if n > 1:  phi -= phi // n  return phi

筛法求欧拉函数:

def euler_phi_sieve(n):phi = list(range(n + 1))  # 初始化phi[i] = ifor i in range(2, n + 1):if phi[i] == i:for j in range(i, n + 1, i):  # 遇到质数i 调整i所有倍数的欧拉函数值phi[j] -= phi[j] // ireturn phi


https://www.acwing.com/problem/content/description/4002/

d = gcd(a,m) = gcd(a+x,m)
d|a d|(a+x) --> d|x
我们定义  a ′ = a d , m ′ = m d , x ′ = x d ,那么根据最大公约数的性质,可得: gcd ⁡ ( a ′ + x ′ , m ′ ) = 1 \begin{aligned}\text{我们定义 }a^{\prime}=\frac ad,m^{\prime}=\frac md,x^{\prime}=\frac xd\text{,那么根据最大公约数的性质,可得:}\gcd(a^{\prime}+x^{\prime},m^{\prime})=1\end{aligned} 我们定义 a=da,m=dm,x=dx,那么根据最大公约数的性质,可得:gcd(a+x,m)=1
而题目就转化为了: 求  [ a ′ , a ′ + m ′ − 1 ] 中有几个数与  m ′ 互质。 \text{而题目就转化为了: 求 }[a^{\prime},a^{\prime}+m^{\prime}-1]\text{ 中有几个数与 }m^{\prime}\text{ 互质。} 而题目就转化为了 [a,a+m1] 中有几个数与 m 互质。
因为  [ 0 , a ′ − 1 ] 中在模  m 的意义下的余数与  [ m ′ , a ′ + m ′ − 1 ] 一样 \text{因为 }[0,a^{\prime}-1]\text{ 中在模 }m\text{ 的意义下的余数与 }[m^{\prime},a^{\prime}+m^{\prime}-1]\text{ 一样} 因为 [0,a1] 中在模 m 的意义下的余数与 [m,a+m1] 一样

所以转化为求 p h i ( m ′ ) phi(m') phi(m)

from math import isqrt, gcd
def euler_phi(n):if n == 1:return 1phi = nfor i in range(2, isqrt(n) + 1):if n % i == 0:phi -= phi // iwhile n % i == 0:n //= iif n > 1:phi -= phi // nreturn phit = int(input())
for _ in range(t):a, m = map(int, input().split())d = gcd(a, m)ans = euler_phi(m // d)print(ans)


https://www.acwing.com/problem/content/203/

本题 n ,t 数据范围较小 --> 不然需要 筛法求欧拉函数 , 甚至加上前缀和优化

from math import isqrt
def euler_phi(n):if n == 1:return 1phi = nfor i in range(2, isqrt(n) + 1):if n % i == 0:phi -= phi // iwhile n % i == 0:n //= iif n > 1:phi -= phi // nreturn phit = int(input())
for i in range(1, t + 1):n = int(input())cnt = 0for k in range(n + 1):cnt += euler_phi(k)ans = cnt * 2 + 1print(f"{i} {n} {ans}")


2023蓝桥杯省赛

https://www.lanqiao.cn/problems/3522/learning/

若m和n的质因数组成相同,m是n的k倍,则euler_phi(m)也是euler_phi(n)的k倍
euler_phi(a^b) = euler_phi(a) * a^(b-1)

mod = 998244353
a, b = map(int, input().split())
if a == 1:exit(print(0))from math import isqrt
def euler_phi(n):if n == 1:return 1phi = nmax_n = isqrt(n)for i in range(2, max_n + 1):if n % i == 0:phi -= phi // iwhile n % i == 0:n //= iif n > 1:phi -= phi // nreturn phiprint(pow(a, b - 1, mod) * euler_phi(a) % mod)


欧拉降幂

幂次大于欧拉函数值 --> 欧拉降幂

a b ≡ { a b m o d φ ( m ) , gcd ⁡ ( a , m ) = 1 , a b , gcd ⁡ ( a , m ) ≠ 1 , b < φ ( m ) , ( m o d m ) a ( b m o d φ ( m ) ) + φ ( m ) , gcd ⁡ ( a , m ) ≠ 1 , b ≥ φ ( m ) . a^b\equiv\begin{cases}a^{b\mathrm{~mod~}\varphi(m)},&\gcd(a,m)=1,\\a^b,&\gcd(a,m)\neq1,b<\varphi(m),&(\mathrm{mod~}m)\\a^{(b\mathrm{~mod~}\varphi(m))+\varphi(m)},&\gcd(a,m)\neq1,b\geq\varphi(m).&\end{cases} ab ab mod φ(m),ab,a(b mod φ(m))+φ(m),gcd(a,m)=1,gcd(a,m)=1,b<φ(m),gcd(a,m)=1,bφ(m).(mod m)


模板

https://www.luogu.com.cn/problem/P5091

a, m, b = input().split()  # 读取为字符串(b非常大)
a = int(a)
m = int(m)from math import isqrt, gcd
def euler_phi(n):if n == 1:return 1max_n = isqrt(n)phi = nfor i in range(2, max_n + 1):if n % i == 0:phi -= phi // iwhile n % i == 0:n //= iif n > 1:phi -= phi // nreturn phiif m == 1:exit(print(0))phi = euler_phi(m)
flg = 0
b_mod_phi = 0
for digit in b:b_mod_phi = (b_mod_phi * 10 + int(digit)) % phiif len(b) > len(str(phi)):flg = 1
elif len(b) == len(str(phi)):flg = b >= str(phi)if gcd(a, m) == 1:int_b = b_mod_phi
else:if flg:int_b = b_mod_phi + phielse:int_b = int(b)print(pow(a, int_b, m))


https://www.lanqiao.cn/problems/1155/learning/

n, m = map(int, input().split())
mod = 10**9 + 7
phi = mod - 1x = 1
flg = 0
for i in range(1, m + 1):x *= iif x >= phi:x %= phiflg = 1
if flg:x += phiprint(pow(n, x, mod))


END
*如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给

相关文章:

【算法】 欧拉函数与欧拉降幂 python

欧拉函数 欧拉函数 ϕ ( n ) \phi(n) ϕ(n) 表示小于等于 n 的正整数中与 n 互质的数的个数。即&#xff1a; ϕ ( n ) ∣ { k ∈ Z ∣ 1 ≤ k ≤ n , gcd ⁡ ( k , n ) 1 } ∣ \phi(n) \left| \{ k \in \mathbb{Z}^ \mid 1 \leq k \leq n, \gcd(k, n) 1 \} \right| ϕ(n)…...

【Python] pip制作离线包

制作离线安装包是一种非常实用的方法&#xff0c;尤其是在网络环境受限或需要在多台机器上部署相同环境时。以下是详细的步骤&#xff0c;帮助您创建一个包含所有依赖项的离线安装包&#xff0c;并在后续环境中复用。 步骤 1&#xff1a;准备工具和环境 确保您有一台可以访问互…...

什么是回表?哪些数据库存在回表?

目录 一、什么是回表1. 回表的核心流程2. 示例说明3. 回表的性能问题4. 总结 二、哪些数据库会有回表1. MySQL&#xff08;InnoDB&#xff09;2. Oracle3. 其他数据库&#xff08;如 SQL Server、PostgreSQL&#xff09;4. 总结 三、非聚集索引与聚集索引的区别及产生原因1. 聚…...

linux 内存踩踏导致的空指针问题分析纪要

1&#xff0c;查看日志信息打印 我们看到日志发现发包的skb模块有NULL pointer情况&#xff0c;我们看代码分析skb指针不可能出现是空指针&#xff0c;这个时候我们怀疑可能是出现了踩内存导致的空指针情况&#xff0c;所以我们首先需要找到系统PANIC的条件&#xff0c;也就是…...

使用 VcXsrv 在 Windows 10 上运行 Ubuntu 图形界面

VcXsrv 是一款用于 Windows 的开源 X 服务器&#xff0c;它允许在 Windows 系统上显示 Linux 的图形应用程序。当在 Windows 10 上安装并正确配置 VcXsrv 后&#xff0c;通过设置 WSL2 中的DISPLAY环境变量&#xff0c;使其指向运行 VcXsrv 的 Windows 主机的 IP 地址&#xff…...

LSTM-SVM长短期记忆神经网络结合支持向量机组合模型多特征分类预测/故障诊断,适合新手小白研究学习(Matlab完整源码和数据)

LSTM-SVM长短期记忆神经网络结合支持向量机组合模型多特征分类预测/故障诊断&#xff0c;适合新手小白研究学习&#xff08;Matlab完整源码和数据&#xff09; 目录 LSTM-SVM长短期记忆神经网络结合支持向量机组合模型多特征分类预测/故障诊断&#xff0c;适合新手小白研究学习…...

Autoware源码总结

Autoware源码网站 项目简介 教程 Autoware的整体架构如下图&#xff0c;主要包括传感器sensing、高精地图map data、车辆接口vehicle interface、感知perception&#xff08;动态障碍物检测detection、跟踪tracking、预测prediction&#xff1b;交通信号灯检测detection、分类c…...

QT聊天项目DAY01

1.新建初始项目 2.修改UI格式 运行效果 3.创建登录界面 设计登录界面UI 设计布局 调整布局间距 往水平布局中拖入标签和文本输入框 更换控件名称并固定高度 添加窗口部件 往现有的资源文件中导入图片 添加水平布局 4.设置登陆界面为主窗口的核心组件 #pragma once#include &l…...

【NumPy科学计算引擎:从基础操作到高性能实践】

目录 前言&#xff1a;技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析关键技术模块说明技术选型对比 二、实战演示环境配置核心代码实现运行结果验证 三、性能对比测试方法论量化数据对比结果分析 四、最佳实践推荐方案 ✅常见错误 ❌调试技巧 五、应用…...

MySQL InnoDB 索引与B+树面试题20道

1. B树和B+树的区别是什么? 数据存储位置: B树:所有节点(包括内部节点和叶子节点)均存储数据。 B+树:仅叶子节点存储数据,内部节点仅存储键值(索引)。 叶子节点结构: B+树:叶子节点通过双向链表连接,支持高效的范围查询。 查询稳定性: B+树:所有查询必须走到叶子…...

论文精度:基于LVNet的高效混合架构:多帧红外小目标检测新突破

论文地址:https://arxiv.org/pdf/2503.02220 目录 一、论文背景与结构 1.1 研究背景 1.2 论文结构 二、核心创新点解读 2.1 三大创新突破 2.2 创新结构原理 2.2.1 多尺度CNN前端 2.2.2 视频Transformer设计 三、代码复现指南 3.1 环境配置 3.2 数据集准备 3.3 训…...

ORM查询的补充

一&#xff0c;ORM查询的补充&#xff1a; 1&#xff0c;连接查询&#xff1a; 反向查询: 先介绍一下什么是正向查询&#xff0c;比如我们之前的数据表之间建立的一对多的关系&#xff0c;我们通过文章找到相应的作者是属于正向查询的&#xff08;由多到一&#xff09;&…...

【C语言-全局变量】

【C语言-全局变量】 1.能局部就局部&#xff0c;别啥都往全局塞2.尽量用结构体对零散变量封装3.函数传参4.静态变量模块化5 单例模式, 限制全局实例数量6. 配置化全局参数——集中管理可调参数7. 事件驱动架构&#xff1a;消息队列通信策略选择建议 参考https://mp.weixin.qq.c…...

mysql 商城商品属性开发的动态解决方案

终极方案&#xff1a;动态属性解决方案 推荐使用 JSON 字段 虚拟列索引 的组合方案 结合灵活存储与查询优化&#xff0c;平衡扩展性与性能 完整实现步骤 步骤 1&#xff1a;创建基础表结构 CREATE TABLE products (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100) NO…...

python利用open-cv和SSIM和特征值比较两个图片的相似性

以下是关于 **SSIM&#xff08;结构相似性指数&#xff09;** 和 **特征匹配** 的详细解释及实际示例&#xff0c;帮助理解它们的区别和应用场景&#xff1a; --- ### **1. SSIM&#xff08;结构相似性指数&#xff09;** #### **含义**&#xff1a; - **SSIM** 是一种衡量两…...

蔚来汽车智能座舱接入通义大模型,并使用通义灵码全面提效

为加速AI应用在企业市场落地&#xff0c;4月9日&#xff0c;阿里云在北京召开AI势能大会。阿里云智能集团资深副总裁、公共云事业部总裁刘伟光发表主题演讲&#xff0c;大模型的社会价值正在企业市场释放&#xff0c;阿里云将坚定投入&#xff0c;打造全栈领先的技术&#xff0…...

QT 老版本下载地址被禁 如何下载

前提&#xff1a; 想用老版本的QT 5.12 系列&#xff0c;但是QT官方已经封禁了国内IP 访问&#xff0c;5.15之前的版本&#xff0c;而且5.14.2是最后一个离线exe版本 ; Index of /official_releases/qt 基本不可用&#xff1b;全部改为在线安装&#xff1b; 收集了一下地址&am…...

VMWare Workstation Pro17.6最新版虚拟机详细安装教程(附安装包教程)

目录 前言 一、VMWare虚拟机下载 二、VMWare虚拟机安装 三、运行虚拟机 前言 VMware 是全球领先的虚拟化技术与云计算解决方案提供商&#xff0c;通过软件模拟计算机硬件环境&#xff0c;允许用户在一台物理设备上运行多个独立的虚拟操作系统或应用。其核心技术可提升硬件…...

【数据结构】红黑树超详解 ---一篇通关红黑树原理(含源码解析+动态构建红黑树)

一.什么是红黑树 红黑树是一种自平衡的二叉查找树&#xff0c;是计算机科学中用到的一种数据结构。1972年出现&#xff0c;最初被称为平衡二叉B树。1978年更名为“红黑树”。是一种特殊的二叉查找树&#xff0c;红黑树的每一个节点上都有存储表示节点的颜色。每一个节点可以是…...

uni-app初学

文章目录 1. pages.json 页面路由2. 图标3. 全局 CSS4. 首页4.1 整体框架4.2 完整代码4.3 轮播图 swiper4.3.1 image 4.4 公告4.4.1 uni-icons 4.5 分类 uni-row、uni-col4.6 商品列表 uni-row、uni-col 小程序开发网址&#xff1a; 注册小程序账号 微信开发者工具下载 uniapp …...

PHP多维数组

在 PHP 中&#xff0c;多维数组是数组的数组&#xff0c;允许你存储和处理更复杂的数据结构。多维数组可以有任意数量的维度&#xff0c;但通常我们最常用的是二维数组&#xff08;数组中的数组&#xff09;。 首先来介绍一下一维数组&#xff0c; <?php//一维数组 $strAr…...

数学建模:针对汽车行驶工况构建思路的延伸应用

前言&#xff1a; 汽车行驶工况构建的思简单理解为将采集的大量数据进行“去除干扰、数据处理&#xff0c;缩减至1800S的数据”&#xff0c;并可达到等效替换的目的&#xff0c;可以使在试验室快速复现&#xff1b;相应的解决思路、办法可应用在 “通过能量流采集设备大量采集…...

go语言内存泄漏的常见形式

go语言内存泄漏 子字符串导致的内存泄漏 使用自动垃圾回收的语言进行编程时&#xff0c;通常我们无需担心内存泄漏的问题&#xff0c;因为运行时会定期回收未使用的内存。但是如果你以为这样就完事大吉了&#xff0c;哪里就大错特措了。 因为&#xff0c;虽然go中并未对字符串…...

当DRAM邂逅SSD:新型“DRAM+”存储技术来了!

在当今快速发展的科技领域&#xff0c;数据存储的需求日益增长&#xff0c;对存储设备的性能和可靠性提出了更高的要求。传统DRAM以其高速度著称&#xff0c;但其易失性限制了应用范围&#xff1b;而固态硬盘SSD虽然提供非易失性存储&#xff0c;但在速度上远不及DRAM。 为了解…...

论文精度:YOLOMG:基于视觉的无人机间检测算法——外观与像素级运动融合详解

论文地址:https://arxiv.org/pdf/2503.07115 1. 论文概述 论文标题:YOLOMG: Vision-based Drone-to-Drone Detection with Appearance and Pixel-Level Motion Fusion 作者:Hanqing Guo, Xiuxiu Lin, Shiyu Zhao 发表:未明确会议/期刊(推测为预印本或待发表) 核心贡献:…...

JS实现文件点击或者拖拽上传

B站看到了渡一大师课的切片&#xff0c;自己实现了一下&#xff0c;做下记录 效果展示 分为上传前、上传中和上传后 实现 分为两步 界面交互网络请求 源码如下 upload.html <!DOCTYPE html> <html lang"zh-CN"><head><meta charset&q…...

【KWDB 创作者计划】_ruby基础语法

以下是 Ruby 基础语法的简明总结&#xff0c;适合快速入门&#xff1a; 一、变量与常量 1. 局部变量 小写字母或下划线开头&#xff0c;作用域为当前代码块。 name "Alice" _age 20//局部变量附加&#xff1a;{{{{ 声明与命名规则 命名格式 以小写字母或下划线…...

Python Cookbook-5.15 根据姓的首字母将人名排序和分组

任务 想将一组人名写入一个地址簿&#xff0c;同时还希望地址簿能够根据姓的首字母进行分组&#xff0c;且按照字母顺序表排序。 解决方案 Python 2.4 的新 itertools.groupby 函数使得这个任务很简单: import itertools def qroupnames(name_iterable):sorted_names sort…...

2025 蓝桥杯省赛c++B组个人题解

声明 本题解为退役蒻苟所写&#xff0c;不保证正确性&#xff0c;仅供参考。 花了大概2个半小时写完&#xff0c;感觉比去年省赛简单&#xff0c;难度大概等价于 codeforces dv4.5 吧 菜鸡不熟悉树上背包&#xff0c;调了一个多小时 题目旁边的是 cf 预测分 所有代码均以通…...

Centos7.9 升级内核,安装RTX5880驱动

系统镜像下载 https://vault.centos.org/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso 系统安装步骤省略 开始安装显卡驱动 远程登录查看内核 [root192 ~]# uname -a Linux 192.168.119.166 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x8…...