洛谷题单指南-进阶数论-P3811 【模板】模意义下的乘法逆元

news/2025/9/23 12:03:39/文章来源:https://www.cnblogs.com/hackerchef/p/19106810

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

题意解读:逆元的模版题。

解题思路:

1、同余和模运算

同余定义:若整数 a 和 b 除以 m 的余数相同,称 a 与 b 模 m 同余,记为 a ≡ b (mod m)

模运算符号:a mod m表示 a 除以 m 的非负余数,结果范围是 0 <= a mod m < m(区别于 “同余” 的等价关系,这是一个求余数的运算,在C++中用%表示mod)。

模运算性质:

  • 加法性质:(a + b) % m = (a % m + b % m) % m
  • 减法性质:(a - b) % m = (a % m - b % m) % m
  • 乘法性质:(a * b) % m = (a % m * b % m) % m

2、逆元

模运算的除法不直接成立,需通过 “乘法逆元” 转化为乘法(核心:将 (a / c) % m转化为(a * c-1) % m,其中 c-1是 c 的逆元)。

逆元定义:若c * c-1 ≡ 1(mod m),则称 c-1是 c 模 m 的乘法逆元(逆元唯一,且在 1 <= c-1 < m范围内)。

逆元存在条件:gcd(c, m) = 1(即 c 与 m 互质)。若 c 与 m 不互质,则 c 的逆元不存在,除法运算无意义。

3、逆元计算方法

方法1:扩展欧几里得算法

设a的逆元为x,根据a * x ≡ 1(mod m)得到ax + my = 1,只需要解此不定方程,x的最小正整数解就是逆元。

方法2:费马小定理

当p为质数时,根据费马小定理有ap-1 ≡ 1(mod p),a * ap-2 ≡ 1(mod p),a的逆元是ap-2,通过快速幂即可求解。

方法3:递推法

最常用的是线性递推求模质数下的逆元,适用于需要批量计算 1, 2, ..., n在模质数 p 下逆元的场景(时间复杂度 O(n),效率极高)。这种方法仅适用于 p 是质数 且 1 <= a < p的情况(此时 a 与 p 互质,逆元必然存在)

设 p 是质数,a 是区间 1 <= a < p 中的整数,目标是求a-1 (mod p)(即 a 的逆元)。

基础关系:令 p = k * a + r,其中 k =  ⌊p/a⌋ (商),r = p mod a(余数),满足 0 < r < a < p(因 a < p且 p 是质数,r != 0)。

模运算转化:对等式 p = k * a + r两边模 p,得:0 ≡ k * a + r (mod p)移项后:r ≡ -k * a (mod p)

两边乘逆元化简:两边同乘 r-1 * a-1(因 r < a < p) 且 p 是质数,r 和 a 的逆元均存在):r * r-1 * a-1 ≡ -k * a * r-1 * a-1 (mod p)左边化简为 a-1,右边化简为-k * r-1,即:a-1 ≡ -k * r-1 (mod p)

代入 k 和 r 的表达式:因 k =  ⌊p/a⌋r = p mod a,故递推公式为:a-1 ≡ - ⌊p/a⌋ * (p mod a)-1 (mod p)

为避免负数运算,可将公式调整为非负形式(加 p 后再模 p):a-1 ≡ (p - ⌊p/a⌋) * (p mod a)-1 (mod p)

边界条件:当 a = 1时,显然 1 * 1-1 ≡ 1 \(mod p),因此1-1=1

递推公式:设inv[a]表示a的逆元,inv[1] = 1,inv[a] = ((p - ⌊p/a⌋) * inv[p % a]) % p

100分代码:

#include <bits/stdc++.h>
using namespace std;const int N = 3000005;
int inv[N];
int n, p;int main()
{cin >> n >> p;inv[1] = 1;for(int i = 2; i <= n; i++){inv[i] = 1ll * (p - p / i) * inv[p % i] % p;}for(int i = 1; i <= n; i++) printf("%d\n", inv[i]);return 0;
}

 

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

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

相关文章

北京交通管制信息网站wordpress 获取页面标题

题目 输入一个字符串&#xff0c;打印该字符中字符的所有排列。 例如&#xff0c;输入字符串abc&#xff0c;则打印出由字符a、b、c所能排列出来的所有字符串有abc、acb、bac、bca、cab、cba 分析 把一个字符串看成由两部分组成&#xff1a;第一部分是它的第一个字符&#…

山西省建设局官方网站中企动力值不值得入职

19-20年VIO 梳理 1. 开源代码介绍&#xff1a; DSM2. FMD Stereo SLAM&#xff1a;融合MVG和直接方法&#xff0c;实现准确&#xff0c;快速的双目SLAM3. 基于VINS-Mono开发的SPVIS4. 改进&#xff1a;一种基于光流的动态环境移动机器人定位方案5. PVIO:基于先验平面约束的高效…

消防设备网站建设怎么找做网站的

事务的简单配置及使用 配置事务管理器声明队列生产者代码测试 RabbitMQ是基于AMQP协议实现的&#xff0c;该协议实现了事务机制&#xff0c;因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的&#xff0c…

贵阳市观山湖区建设局网站深圳系统开发高端网站建设

1. probability space 概率空间 1.1 概率基础 1.2 概率空间 2. Filtration filtration在钱敏平老师和龚光鲁老师的《随机过程论》中直接称其为非降的KaTeX parse error: Undefined control sequence: \sigmma at position 1: \̲s̲i̲g̲m̲m̲a̲代数族。如图。 一般叫σ\…

科技公司网站设计欣赏从零开始学习网络营销

目录 0. 前言1. Ubuntu24.04的安装2. Ubuntu24.04的配置2.1 基本配置2.2 开发环境配置 0. 前言 我去年在做一个项目的时候需要用到ros&#xff0c;ros需要运行在Ubuntu系统上。但我的笔记本电脑配置不是很好&#xff0c;采用虚拟机运行的想法随之被否决&#xff0c;决定采用安…

中山网站设计与建设全球新冠最新数据报告

SpringBoot-AOP AOP基础 学习完spring的事务管理之后&#xff0c;接下来我们进入到AOP的学习。 AOP也是spring框架的第二大核心&#xff0c;我们先来学习AOP的基础。 在AOP基础这个阶段&#xff0c;我们首先介绍一下什么是AOP&#xff0c;再通过一个快速入门程序&#xff0c…

四川成都网站优化oppo网站建设

1、WPF 4 DataGrid 控件&#xff08;基本功能篇&#xff09; 基本使用&#xff0c;绑定数据展示 2、WPF 4 DataGrid 控件&#xff08;自定义样式篇&#xff09; 定义行&#xff0c;列&#xff0c;头&#xff0c;单元格等样式 3、WPF 4 DataGrid 控件&#xff08;进阶篇一&#…

电子书城网站开发项目概况洛阳建站哪家好

1049. 数列的片段和(20) 时间限制200 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CAO, Peng给定一个正数数列&#xff0c;我们可以从中截取任意的连续的几个数&#xff0c;称为片段。例如&#xff0c;给定数列{0.1, 0.2, 0.3, 0.4}&#xff0c;我们有(0.1) (0.1…

如何通过做网站挣钱天猫开店流程及费用2022

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 进度条是一个比较常见的控件。如果某个操作需要很长的时间才能完成&#xff0c;那么这个时候最好有一个进度条提示&#xff0c;这样比较容易平复一…

Interlocked.Increment学习

Interlocked.Increment 是 .NET 中的一个原子操作方法,用于线程安全地将一个整型变量递增 1。Interlocked.Increment 是线程安全地递增整数的标准方式,适用于高并发计数场景。定义: public static int Increment(re…

完整教程:网络安全期末大论文

完整教程:网络安全期末大论文2025-09-23 11:53 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

基于解析法的四轴SCARA机器人正逆运动学代码

一、正运动学实现(C++) #include <cmath> #include <array>struct Pose {double x, y, z; // 末端位姿double yaw; // 末端偏航角 };// DH参数定义(示例值) const double L1 = 0.2; // 基座到J…

.Net-IIS 文件上传安全漏洞问题

近期勒索病毒、网络攻击频繁。经发现攻击会通过 暴露在公网上的系统地址进行扫描,找到文件上传漏洞,把注入了执行文件加密命令的脚本 写入到网站界面文件里。通过文件上传方法把文件上传到服务器上(篡改文件类型方式…

【F#学习】记录 Record

记录,record, 是一些字段的集合。使用type关键字来定义一个record。记录的字段需要放置在花括号{}之内,需要明确地声明类型和名称。新建一个记录的实例的时候,必须给所有字段赋值。 定义一个记录的时候,字段必须换…

做物流网站有哪些内容在哪里找工厂采购信息

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

如何选择做网站的公司东莞58同城

Linux rpm 命令参数使用详解&#xff3b;介绍和应用&#xff3d; RPM是RedHat Package Manager&#xff08;RedHat软件包管理工具&#xff09;类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包&#xff08;Binary&#xff09;以及源代码包&#xff08;Source&#x…

免费网站是全屋定制网络平台

目录 一、关键字 二、标识符 三、注释 四、变量 五、数据类型 六、运算符 6.1 算术运算符 6.2 比较运算符 6.3 逻辑运算符 6.4 位移运算符 一、关键字 在 Java 中内置了很多有特殊意义的单词&#xff0c;这些单词不能做为类名、方法名、变量名来使用。关键字必须是小…

【光照】[高光反射specular]以UnityURP为例

本文系统介绍了Unity URP渲染管线中的高光反射实现技术。从经典的Phong、Blinn-Phong经验模型到现代的Cook-Torrance物理模型,分析了各模型的计算原理、特点及适用场景。重点剖析了URP采用的多级高光系统策略,根据设…

国外网站打开很慢安阳网站设计哪家专业

PPSSPPSDL for Mac是一款模拟器软件&#xff0c;它允许用户在Mac上运行PSP&#xff08;PlayStation Portable&#xff09;游戏。通过这款模拟器&#xff0c;用户可以体验到高清甚至更高的分辨率的游戏画面&#xff0c;同时还能够升级纹理以提升清晰度&#xff0c;并启用后处理着…

民宿网站建设问卷调查重庆建设监理协会

写在前面 工作需要遇到&#xff0c;简单整理理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃避方式&#xff0c;是对…