【算法笔记】欧拉降幂公式与欧拉函数

欧拉降幂公式

在数论中,欧拉降幂公式是一个强大的工具,用于简化大指数模运算。公式如下:

∀k>φ(m),有Ak≡Akmodφ(m)+φ(m)(modm)成立。\forall k > \varphi(m),有 A^k \equiv A^{k \mod \varphi(m) + \varphi(m)} \pmod{m} 成立。 k>φ(m),有AkAkmodφ(m)+φ(m)(modm)成立。

其中:

  • AAAmmm 是正整数
  • φ(m)\varphi(m)φ(m) 是欧拉函数
  • kkk 是指数,且 k>φ(m)k > \varphi(m)k>φ(m)

这个公式允许我们将非常大的指数 kkk 降低到可计算的范围,从而高效地计算模幂。

欧拉函数

欧拉函数 φ(n)\varphi(n)φ(n) 表示小于或等于 nnn 的正整数中与 nnn 互质的数的个数。例如:

  • φ(1)=1\varphi(1) = 1φ(1)=1
  • φ(2)=1\varphi(2) = 1φ(2)=1(因为1与2互质)
  • φ(3)=2\varphi(3) = 2φ(3)=2(因为1和2与3互质)
  • φ(4)=2\varphi(4) = 2φ(4)=2(因为1和3与4互质)
  • 如果 mmm 是质数,则φ(m)=m−1\varphi(m) = m - 1φ(m)=m1

计算欧拉函数 φ(n)\varphi(n)φ(n) 的代码:

int euler(int n) {int ans = n;  // 初始化结果为nfor (int i = 2; i * i <= n; ++i)  // 遍历2到√nif (n % i == 0) {  // 如果i是n的质因数ans = ans / i * (i - 1);  // 应用公式:ans *= (1 - 1/i)while (n % i == 0)  // 除去所有i因子n /= i;}if (n > 1)  // 处理剩余的大于√n的质因数ans = ans / n * (n - 1);return ans;
}

原理基于质因数分解,欧拉函数是积性函数,即如果 mmmnnn 互质,则 φ(mn)=φ(m)⋅φ(n)\varphi(mn) = \varphi(m) \cdot \varphi(n)φ(mn)=φ(m)φ(n)。对于任意正整数 mmm,其欧拉函数可以通过以下公式计算:
φ(m)=m∏p∣m(1−1p)\varphi(m) = m \prod_{p | m} \left(1 - \frac{1}{p}\right)φ(m)=mpm(1p1)
时间复杂度 O(sqrt(n))O(sqrt(n))O(sqrt(n))

例题

洛谷P12847 [蓝桥杯 2025 国 A] 斐波那契数列

n<=1e18

AC代码:

(这里还用到了矩阵快速幂求斐波那契数列,以及斐波那契前n项和的知识)

#include <bits/stdc++.h>
using namespace std;
const int MOD = 998244353 - 1;long long qpow(long long a, long long b) {long long res = 1;while (b > 0) {if (b & 1)res = res * a % (MOD + 1);a = a * a % (MOD + 1);b >>= 1;}return res;
}struct Matrix { // 矩阵结构体2x2long long m[2][2];Matrix() { memset(m, 0, sizeof(m)); }
};// 矩阵乘法(优化版)
Matrix multiply(const Matrix &a, const Matrix &b) {Matrix res;for (int i = 0; i < 2; ++i) {for (int j = 0; j < 2; ++j) {for (int k = 0; k < 2; ++k) {res.m[i][j] = (res.m[i][j] + a.m[i][k] * b.m[k][j]) % MOD;}}}return res;
}// 矩阵快速幂
Matrix matrix_pow(Matrix mat, long long power) {Matrix result;result.m[0][0] = result.m[1][1] = 1; // 单位矩阵while (power > 0) {if (power & 1) {result = multiply(mat, result);}mat = multiply(mat, mat);power >>= 1;}return result;
}// 计算斐波那契数(从F(1)=1开始)
long long fibonacci(long long n) {if (n == 0)return 0;if (n == 1 || n == 2)return 1;Matrix base;base.m[0][0] = base.m[0][1] = base.m[1][0] = 1;Matrix result = matrix_pow(base, n - 2);return (result.m[0][0] + result.m[0][1]) % MOD;;
}int main() {long long n;cin >> n;if (n == 1) {cout << 2 << endl;} else if (n == 2) {cout << 6 << endl;} else {/*斐波那契数列的前n项和:S(n) = F(n+2)-1*/int p2 = (1 + fibonacci(n - 2 + 2) - 1) % MOD + MOD;int p3 = (fibonacci(n - 1 + 2) - 1) % MOD + MOD;cout << qpow(2, p2) * qpow(3, p3) % (MOD + 1) << endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95789.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于STM32的交通灯设计—紧急模式、可调时间

基于STM32交通灯设计&#xff08;仿真&#xff0b;程序&#xff0b;设计报告&#xff09;功能介绍具体功能&#xff1a;1.数码管和LED模拟交通灯&#xff1b;2.南北绿灯9秒&#xff0c;东西绿灯15秒&#xff0c;黄灯2秒&#xff1b;3.紧急情况&#xff1a;按下按键&#xff0c;…

汽车软件研发智能化:AI在CI/CD中的实践

当汽车行业加速驶入“软件定义”的时代&#xff0c;软件已成为决定车辆竞争力的核心要素。从智能座舱的多场景交互到自动驾驶的复杂决策逻辑&#xff0c;汽车软件的代码量逐年递增&#xff0c;复杂度呈指数级攀升&#xff0c;传统研发流程深陷困境&#xff1a;代码质量管控滞后…

DeepSeek:开启智能体驱动对话式数据分析新时代

在数字化浪潮汹涌澎湃的当下,数据已然成为驱动企业发展、推动科学研究以及优化日常生活决策的关键力量。数据分析,作为从海量数据中提取有价值信息、洞察趋势、挖掘规律的核心手段,其重要性不言而喻。无论是企业精准把握市场动态、优化运营流程,还是科研人员探索未知领域、…

MCP驱动企业微信智能中枢:企业级机器人服务构建全攻略

一、背景与目标 公司规模200-300人&#xff0c;主要使用企业微信作为内部沟通平台。日常面临大量重复性通知工作&#xff0c;如会议提醒、系统维护通知、项目进度更新等。 业务痛点&#xff1a; 人工发送通知效率低下&#xff0c;平均3分钟/条重要信息传递不及时&#xff0c…

语音识别系统的技术核心:从声音到文字的智能转换

语音识别技术&#xff0c;也称为自动语音识别&#xff08;ASR&#xff09;&#xff0c;其核心目标是将人类语音信号转换为对应的文本或指令。随着人工智能的发展&#xff0c;语音识别已成为智能助手、实时翻译、车载系统等领域的关键技术。其工作原理可分解为信号处理、特征提取…

《用 Django 构建博客应用:从模型设计到文章管理的全流程实战》

《用 Django 构建博客应用:从模型设计到文章管理的全流程实战》 一、引言:为什么选择 Django 构建博客系统? 在 Python 的 Web 框架中,Django 被誉为“全能型选手”。它不仅提供了强大的 ORM、模板系统、认证机制和后台管理,还鼓励开发者遵循“DRY”(Don’t Repeat You…

以 R1 为视角,手把手教你画 OSPF 最短路径树与推导路由表

视频版讲解>>>>>>>>>>>>>>>>>>>OSPF最短路径树构建与路由计算练习&#xff08;一&#xff09; 在 OSPF 协议的学习中&#xff0c;“纸上谈兵” 不如 “实战推演”—— 尤其是以特定路由器为主视角&#xff0c;从 LS…

axios请求缓存与重复拦截:“相同请求未完成时,不发起新请求”

import axios from "axios";// 1. 缓存已完成的请求结果&#xff08;key&#xff1a;请求URL参数&#xff0c;value&#xff1a;数据&#xff09; const requestCache new Map(); // 2. 记录正在执行的请求&#xff08;避免并行重复请求&#xff09; const pendingR…

k8s的SidecarSet配置和initContainers

目录引言一、k8s如何实现Sidecar这段配置正确吗&#xff1f;正确的配置方式为什么这样做&#xff1f;一个简单的例子总结二、什么是SidecarSet主要功能使用场景示例配置三、也可以通过 initContainers 的 restartPolicy 实现边车逻辑四、题外话&#xff1a;什么是InitContainer…

PostgreSQL与SQL Server:为什么 PostgreSQL遥遥领先

PostgreSQL与SQL Server:为什么 PostgreSQL遥遥领先 在数据库领域&#xff0c;PostgreSQL 和 Microsoft SQL Server 长期以来一直是竞争对手。然而&#xff0c;近年来&#xff0c;PostgreSQL 以其性能、灵活性和创新功能让 SQL Server 望尘莫及。以下是对 PostgreSQL 明显优越的…

零跑汽车8月交付57066台,同比增长超88%

零跑汽车官宣&#xff0c;在刚刚过去的8月份&#xff0c;品牌交付57066辆&#xff0c;同比增长超88%再创历史新高&#xff0c;并实现了连续6个月稳坐新势力销冠。目前&#xff0c;零跑旗下共有T03、B10、B01、C01、C10、C11、C16等七款车型在售&#xff0c;得益于零跑坚持全栈自…

DNS地址推荐

DNS地址推荐&#xff08;2025年最新整理&#xff09; 以下DNS服务器按使用场景分类&#xff0c;涵盖国内、国际、安全隐私、游戏优化等需求&#xff0c;均为2025年仍在维护的公共DNS服务&#xff1a; 一、国内通用DNS&#xff08;适合中国大陆用户&#xff09; 国内DNS服务器对…

兴趣电商内容数据洞察未来市场走向研究——基于开源AI智能名片链动2+1模式S2B2C商城小程序的实践

摘要&#xff1a;在互联网电商数据高度透明的当下&#xff0c;“已发生”的品类规模和品类增速数据虽易获取&#xff0c;但主要反映市场历史状况&#xff0c;难以预测未来走向。兴趣电商的内容数据因揭示消费者“新需求”和“潜在需求”&#xff0c;在宏观层面更早体现用户消费…

【已更新文章+代码】2025数学建模国赛A题思路代码文章高教社杯全国大学生数学建模-烟幕干扰弹的投放策略

截止周四晚上11点已更新五个问题完整建模和问题一二的代码 截止周五早上完整版已更新 可以看主页最新博文获取 完整内容请看文末最后的推广群2.1问题1的分析 问题1是典型的确定性时空几何与运动学计算问题&#xff0c;核心在于通过建立坐标系下的参数方程&#xff0c;量化烟幕云…

UE4 Rider如何直接调试PC DebugGame

背景1、用UBT 打了一个exe的包&#xff0c;打开时遇到崩溃&#xff0c;想获知这个崩溃时的中间信息&#xff0c;例如材质信息&#xff0c;于是我直接双击 打包位置下的崩溃dmp文件 &#xff08;MyGame/Saved/Archived/WindowsClient/MyGame/Saved/Crashes/....dmp&#xff09; …

【FastDDS】Layer DDS之Domain ( 06-Partitions )

在DDS(Data Distribution Service,数据分发服务)中,Partition(分区) 是一种在“域(Domain)”提供的物理隔离基础上,为发布者(Publisher)和订阅者(Subscriber)新增的逻辑隔离与通信筛选机制。它的核心作用是在“域”和“主题(Topic)”之外,进一步精细化控制哪些…

FastVLM:高效视觉编码助力视觉语言模型突破高分辨率效率瓶颈

想要掌握如何将大模型的力量发挥到极致吗&#xff1f;叶梓老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。 1小时实战课程&#xff0c;您将学习到如何轻松上手并有效利用 Llama Factory 来微调您的模型&#xff0c;以发挥其最大潜力。 CSDN教学平台录播地址…

【HarmonyOS】一步解决弹框集成-快速弹框QuickDialog使用详解

【HarmonyOS】一步解决弹框集成-快速弹框QuickDialog使用详解 一、集成的应用背景介绍 最近比较忙&#xff0c;除了工作节奏调整&#xff0c;有重点项目需要跟。业务时间&#xff0c;也因为参加了25年创新大赛&#xff0c;我们网友&#xff0c;组成了鸿蒙超新星研发团队&#x…

当公司在你电脑上安装了IP-guard,你必须知道的事

保护公司机密的同时&#xff0c;你的隐私权何在&#xff1f;在现代企业中&#xff0c;为了保护敏感数据和知识产权&#xff0c;很多公司会选择在员工电脑上安装监控软件&#xff0c;IP-guard 就是其中常见的一款。如果你发现公司电脑安装了IP-guard&#xff0c;以下几点是你需要…

拆分TypeScript项目的学习收获:避免缓存问题,peerDependencies,引用本地项目

最近需要将工作中的一个TS包拆出一部分代码&#xff0c;以便在多个团队和项目中共享。原以为这会是一项特别简单的工作&#xff0c;但是也花了两天才大致拆成功。因此记录一下&#xff0c;也给有类似需求的同学一点经验。 所拆项目的大致功能&#xff1a;整个项目的结构大致分为…