洛谷题单指南-进阶数论-P5091 【模板】扩展欧拉定理

news/2025/9/29 10:53:07/文章来源:https://www.cnblogs.com/hackerchef/p/19117065

原题链接:https://www.luogu.com.cn/problem/P5091

题意解读:求ab % m,b超级大。

解题思路:

大数幂取模问题,通常要用到扩展欧拉定理,下面从欧拉函数开始介绍。

1、欧拉函数

定义:小于等于n的正整数中与n互质的数的个数,叫做n的欧拉函数值,记作φ(n),编程时记为phi(n)

n用整数分解定理可表示为p1a1p2a2...pnan,那么φ(n) = n * (1-1/p1) * (1-1/p2)...*(1-1/pn)

通过容斥原理+归纳法不难证明。

主要性质:

如果n是素数,φ(n) = n - 1

如果a,b互质,φ(a * b) = φ(a) * φ(b)

如果a是素数,b % a == 0,φ(a * b) = a * φ(b)

另外,如果要线性计算1~n所有数的φ(n),可以在欧拉筛的过程中进行递推计算:

for(int i = 2; i <= n; i++)
{if(!vis[i]) //i是素数{p[++cnt] = i; //加入素数表vis[i] = true; //标记i为合数phi[i] = i - 1; //计算phi[i]}for(int j = 1; j <= cnt; j++){if(i * p[j] > n) break;vis[i * p[j]] = true; //用最小素因子p[j]标记合数i * p[j]if(i % p[j] != 0){phi[i * p[j]] = phi[i] * (p[j] - 1);}if(i % p[j] == 0){phi[i * p[j]] = phi[i] * p[j];break;}}
}

2、欧拉定理

 如果a与n互质,则有aΦ(n) ≡ 1 ( mod n ),其中Φ(n)是关于n的欧拉函数

主要用来简化幂取模问题,如a,n互质,ab % n = ab%Φ(n) % n

3、费马小定理

欧拉定理的特殊情况,n是质数时aΦ(n) = an-1 ≡ 1 ( mod n )

主要用来求逆元,如求a模n的逆元,n是质数,由于an-1 ≡ 1 ( mod n ),a * an-2 ≡ 1 ( mod n ),因此a-1(mod n) = an-2

4、扩展欧拉定理

对于ab % n,a、n不一定互质

当b < Φ(n)时,直接用快速幂计算即可

当b >= Φ(n)时,ab % n = ab%Φ(n)+Φ(n) % n

5、问题分析

先计算Φ(m)

再判断b,如果b < Φ(m),先将b缩小b = b % Φ(m),再用快速幂计算ksm(a, b, m)

如果b >= Φ(m),b = b % Φ(m) + Φ(m),再计算ksm(a, b, m)

100分代码:

#include <bits/stdc++.h>
using namespace std;int a, m;
string b;int phi(int x)
{int res = x;for(int i = 2; i <= x / i; i++){if(x % i == 0){res = 1ll * res * (i - 1) / i;while(x % i == 0) x /= i;}}if(x != 1) res = 1ll * res * (x - 1) / x;return res;
}int equals(string a, string b)
{if(a.size() != b.size()) return a.size() - b.size();for(int i = 0; i < a.size(); i++){if(a[i] != b[i]) return a[i] - b[i];}return 0;
}int ksm(int a, int b, int p)
{int res = 1;while(b){if(b & 1) res = 1ll * res * a % p;a = 1ll * a * a % p;b >>= 1;}return res;
}int main()
{cin >> a >> m >> b;int phim = phi(m);string phis = ""; //phim的字符串表示int t = phim;while(t){phis.push_back('0' + (t % 10));t /= 10;}reverse(phis.begin(), phis.end());int r = 0;for(int i = 0; i < b.size(); i++){r = (r * 10ll + b[i] - '0') % phim; //当b < phi(m)时,b%phi(m)=b} if(equals(b, phis) >= 0) r = r + phim; //如果b >= phi(m),b = b%phi(m)+phi(m)cout << ksm(a, r, m) << endl;return 0;
}

 

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

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

相关文章

jenkins maven nacos springboot profile实现多环境配置

在 Jenkins 构建 Spring Boot 项目时,结合 Maven、Nacos 和 Profile 可以实现多环境(开发、测试、生产)的自动化部署与配置管理。以下是四者的协同工作方式及具体实现步骤: 核心概念与关系Spring Boot Profile:用…

RAG is really dead? 大模型和知识之间的桥梁没了? - spader

作者:SpaderMan 从 RAG 到上下文工程:理性思考 AI 应用开发,以交付业务结果为目标 最近,Latent Space 播客发布了一期标题为["RAG 已死,上下文工程为王"](https://www.latent.space/p/chroma "&qu…

.NET操作Excel:高效材料读写与批量运行

.NET操作Excel:高效材料读写与批量运行pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

【深度解析】从零构建体育数据流水线:足球与篮球数据接入实战

【深度解析】从零构建体育数据流水线:足球与篮球数据接入实战不止于兴趣,更是技术实践 作为一名开发者兼体育爱好者,我始终对数据驱动体育的世界着迷。但不同于普通观众,我们更关心的是:这些数据如何通过技术手段…

Qwen-Image技术报告

原文:https://mp.weixin.qq.com/s/GLEa3fIc67uX9IK50LDeNw 全文摘要本文介绍了一种名为Qwen-Image的图像生成基础模型,它在复杂文本渲染和精确图像编辑方面取得了显著进展。为了解决复杂文本渲染的挑战,作者设计了一…

苏州相城区网站建设渭南市工程建设项目审批网上办事大厅

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

wordpress全站ajax用wordpress仿a站

中介者模式 中介者模式 中介者模式 介绍&#xff1a;用一个中介对象来封装一系列的对象交互&#xff0c;中介者使各对象不需要显式地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。 实现&#xff1a;抽象中介者类&#xff0c;定义一个…

服装设计网上自学课程宁波网站搜索引擎优化

以下文字是钱学森在1990年给汪成为院士的信中对虚拟现实技术的科学意义和未来发展给与的思考和建议&#xff0c;他也提出可以将虚拟现实技术成为灵境技术。

IOS-和安卓-AR-游戏开发指南-全-

IOS 和安卓 AR 游戏开发指南(全)原文:zh.annas-archive.org/md5/eaf1b154611090aa6422cd5e3d6dc2fc 译者:飞龙 协议:CC BY-NC-SA 4.0前言 在本书中,我们将介绍增强现实及其如何使用强大而简单的工具实现。利用 V…

Winform/C# 输出到Release VS中Release模式下生成去掉生成pdb文件

前几天发布项目,有时候就发布那几个dll,但是一个dll同时还有一个pdb文件,而且pdb文件貌似还挺大。 pdb文件包含了编译后程序指向源代码的位置信息,用于调试的时候定位到源代码,主要是用来方便调试的. 在程序发布为r…

成都响应网站建设网站文章标题

一、实验内容与目的 实验要求&#xff1a; 利用CP226实验仪上的小键盘将程序输入主存储器EM&#xff0c;通过指令的执行实现微程序控制器的程序控制。 实验目的&#xff1a; 1.掌握模型机的操作码测试过程&#xff1b; 2.掌握模型机微程序控制器的基本结构以及程序控制的基本原…

表格上传网站建设网游小说

1. 引言 在任何编程语言中,错误处理都是一个至关重要的部分。在 Go 语言中,错误处理方式独具特色,它并没有采用异常处理机制(try-catch),而是通过显式的错误返回值来处理错误。这种方式让代码更加明确、易于维护,也使得错误处理更加透明。 在这篇博客中,我们将深入探…

做外贸好的网站有哪些百度识图在线

目录 0、基本信息1、研究动机2、创新点2.1、核心思想&#xff1a;2.2、思想推导&#xff1a; 3、准备3.1、符号3.2、互信息3.3、JS散度3.4、Deep InfoMax方法3.5、判别器&#xff1a;f-GAN估计散度 4、具体实现4.1、局部-全局互信息最大化4.2、理论动机 5、实验设置5.1、直推式…

校园二手网站开发与设计任务书行政单位单位网站建设

1.实现一个纵横字谜 2.支持14x14的网格 3.可以查看答案 4.猜测错误会提示答案信息 5.从txt读取词汇 6.每次游戏开始 随机生成纵横字谜 n’h

网站推他网站wordpress教程登陆

1.为什么要有缓冲区 缓冲区分成语言层面的缓冲区和操作系统层面的缓冲区 先说结论&#xff0c;语言的缓冲区可以减少系统调用的次数进而提高向文件写入和读取的效率。 2.举例子 向屏幕打印&#xff0c;无非就是向屏幕这个文件的缓冲区写入&#xff0c;然后在由操作系统刷新…

重庆工程建设信息网站4399谁做的网站

log函数是指数函数y bx 的反函数,用于求数字以某个数为底的对数。log函数的定义:设b>0,b≠1,对于任意实数x > 0,如果存在唯一的实数y,使得 b^y x,则称y为以b为底x的对数,记为:y log_b(x)这里b称为对数的底数。对数运算的底数通常取10和e。常见的对数运算有:1. 常用对数…

公司核名在哪个网站网站提交搜索引擎后出现问题

作者&#xff1a;Zarten知乎专栏&#xff1a;Python爬虫深入详解知乎ID&#xff1a; Zarten简介&#xff1a; 互联网一线工作者&#xff0c;尊重原创并欢迎评论留言指出不足之处&#xff0c;也希望多些关注和点赞是给作者最好的鼓励 &#xff01;介绍MongoDB是一种面向文档型的…

供应商协同平台:打造高效安全供应链的关键

供应商协同平台通过整合技术资源,解决了传统供应链中文件传输混乱、数据更新延迟、安全管控薄弱等问题。结合“Ftrans B2B企业间⽂件安全交换系统”的加密传输与权限管理功能,平台实现了设计图纸、订单数据等关键信息…

互斥锁和信号量机制

互斥锁 特性: 1.需要忙等,进程时间片用完才下处理机,违反让权等待 2.优点:等待奇迹不用切换进程上下文,多处理机系统中,若上锁的时间短,则等待的代价很低 3.常用于多处理机,一个核忙等,其他核照常工作,并快速…

NSIS为当前用户安装和为所有用户安装的选择

一、为当前用户和所有用户安装选择 确定 NSIS 脚本中应使用 SetShellVarContext all 还是 current,主要取决于你的软件安装目标和用户访问需求。可以通过以下几个核心问题来判断: 1. 软件是否需要被系统中所有用户访…