取模除法(逆元)(费马小定理)(线性求逆元)

文章目录

  • 引言
  • 逆元
  • 费马小定理
    • 内容
    • 应用
    • 证明
  • 线性求逆元
  • thanks for reading!

引言

我们做题时经常会由于答案过大,被要求使答案对一个质数取模
我们都知道,加和乘对取模是没有影响的
减法也只需要写一个:

int mod_minus(int a,int b){return a-b>=0 ? a-b : a-b+mod}

就可以啦
但是除法就很头疼
怎么办呢?
这里介绍一种比较简单的利用费马小定理逆元实现取模除法的途径
结合快速幂,每次复杂度为log级别
除此之外,还会介绍一种线性求逆元的方法
首先我们先要搞清楚什么是逆元费马小定理

逆元

乘法逆元,是指数学领域群G中任意一个元素a,都在G中有唯一的逆元a’,具有性质a×a’=a’×a=e,其中e为该群的单位元。——《百度百科》

通俗点说就是逆元与本身相乘等于1
逆元有一个性质:

除一个数等于乘这个数的逆元

比如在正常的乘法意义下,a/b=a*(1/b)
这也是我们实现取模除法的关键
也就是说,当我们要模质数p的条件下使答案除以一个数x时,我们只需要乘上x在模p意义下的逆元即可
所以我们要求出这个逆元,也就是要找到一个k,使:

x*k=1(mod p)

怎么求呢?
我们就要请出我们的费马小定理

费马小定理

内容

若p为质数且a、p互质,则——

ap-1=1(mod p)

应用

讨论完逆元之后,
这个定理怎么用就很显然啦
首先a若不与p互质,那一定是p的质数,乘完肯定是0
不互质时,结合前面逆元的式子,我们就可以有

k*a=1=ap-1

这样就可以得到k:

k=ap-2

如果你只是想背结论,那么到这里你就已经下课了
不过背来的终究会忘!推出来才是自己的!
(虽然证明也可能会忘)
下面就是最好玩的证明了~

证明

我们只需要证明一下费马小定理,其他就都是自己推的了
怎么证呢?
引入概念:

完全剩余系:从模n的每个剩余类中各取一个数,得到一个由n个数组成的集合,叫做模n的一个完全剩余系

这玩意有啥用?
别着急,慢慢看
我们还需要一个引理:

对于互质的a、p, 若i!= j(mod p),则a∗*i != a∗*j (mod p)

这个为什么?怎么证?
看起来就是要反证啦
假设ai=aj(mod p)
移一下项:

a(i-j)=0(mod p)

又因为a、p互质,a mod p不可能为0
所以

i-j=0(mod p)

这与i!= j(mod p)矛盾
证毕

有了完全剩余系和这个引理,我们可以干一些东西了
先构造一个完全剩余系A:

A={0,1,2,…,p-1}

然后,我们令每一项乘上一个a,得到集合B:

B={0,a,2a,3a,…(p-1)a}

因为a与p互质,A又是完全剩余系,其中的数模p互不相同
由刚才的引理可知,B中的元素模p也互不相同,又因为B中也有p个数,所以B也是一个模p的完全剩余系
然后我们又有一个很显然的结论:

若a=b (mod p),c=d(mod p),那么
a∗*c = b∗*d(mod p)

这个很好证了,把每个数拆成k∗*p+x即可
所以我们把去掉模p=0的数后的A的所有数乘起来,B的所有数乘起来,它们得到的乘积还是关于p同余的
写一下就是:

(p-1)!=ap-1∗*(p-1)!(mod p)

移一下项就是:

(p-1)!∗* (ap-1-1)=0(mod p)

因为p是质数,所以(p-1)!显然模p不等于0
所以:

(ap-1-1)=0(mod p)

也就是:

ap-1=1(mod p)

证毕

线性求逆元

洛谷传送门
如何在线性的时间复杂度求出[1,n]在模p意义下的逆元呢?
(和前面的条件一样,p必须是质数)
首先,求i的逆元时,假设我们已经求出[1,i-1]的逆元
我们可以令:

r=p%i

也就是

p=(p/i)*i+r

因为p是质数,i不等于1时,r不等于0
由于等式右边是p,所以不难得出:

(p/i)*i+r=0 (mod p)

等式两边同时乘 i-1∗*r-1,再移项,得:

i-1=-r-1*(p/i)

因为r<i,r的逆元已知
这样就可以在O1的时间内求出i的逆元
从而做到在On的时间内求出[1,n]的逆元

thanks for reading!

(真的不点个赞再走吗awa)

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

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

相关文章

数学基础知识(高精、快速幂、龟速乘……)

压位高精 模板代码 龟速乘 ll ch(ll x,ll y) {ll ret0;while(y){if(y&1) ret(retx)%m;x(xx)%m,y>>1;}return ret; }

P2742 [USACO5.1]圈奶牛Fencing the Cows /【模板】二维凸包

P2742 [USACO5.1]圈奶牛Fencing the Cows /【模板】二维凸包 题目&#xff1a; 给定一些点&#xff0c;问围住所有点所用的围栏的长度 题解&#xff1a; 凸包模板题 凸包详细 代码&#xff1a; #include<iostream> #include<algorithm> #include<cstdio&g…

最小代价(区间dp)(ybtoj)

文章目录题目描述解析代码题目描述 解析 &#xff08;我觉得&#xff09;很难的dp 思路是真的没有想出来 关键在于dp的设计&#xff1a; dp[l][r]&#xff1a;[l,r]的最小价值 f[l][r][a][b]&#xff1a;把l到r之间除了数值在[a,b]之间的数全部消掉需要的最小价值 &#xff08…

P4783-[模板]矩阵求逆

正题 题目链接:https://www.luogu.com.cn/problem/P4783 题目大意 给出一个矩阵&#xff0c;求它的逆矩阵。 1≤n≤4001\leq n\leq 4001≤n≤400 解题思路 记给出矩阵PPP&#xff0c;记单位矩阵EEE。 PP−1E⇒P(EP−1)EP\times P^{-1}E\Rightarrow P\times (E\times P^{-1})…

.net core i上 K8S(六).netcore程序的service网络代理模式

正文上一章我们讲了pod的hostip模式&#xff0c;但在生产环境中&#xff0c;我们都是通过service来访问k8s集群的&#xff0c;service有两种模式来暴漏端口&#xff0c;今天我们来分享一下1.clusterIP模式我们在创建service的时候&#xff0c;默认创建的时clusterIP模式&#x…

CF183D-T-shirtx【dp,贪心】

正题 题目链接:https://www.luogu.com.cn/problem/CF183D 题目大意 nnn个人&#xff0c;mmm种衣服&#xff0c;给出每个人喜欢某件衣服的概率&#xff0c;你可以选择nnn件衣服带过去&#xff08;可以重复款式&#xff09;。求最大化能拿到喜欢衣服人的期望数量。 1≤n≤3000,1…

Jamie and Tree[CF916E]

Jamie and Tree[CF916E] 题意&#xff1a; 有一棵n个点的树&#xff0c;每个节点上有一个权值wi&#xff0c;最开始根为1号点&#xff0e;现在有3种 类型的操作&#xff1a; • 1 root, 表示将根设为root. • 2 u v x, 设u, v的最近公共祖先为p, 将p的子树中的所有点的权值加…

领域驱动设计,让程序员心中有码(三)

“正如西方古典哲学在现代社会逐渐式微&#xff0c;成为少数内心丰满者们填充自己精神世界的宝贵食物&#xff0c;UML也这样&#xff1b;互联网技术飞速发展的今天&#xff0c;各类软件设计思想层出不穷&#xff0c;正是站在UML和其他各种软件基础理论巨人的肩膀上&#xff0c;…

P4127 [AHOI2009]同类分布(数位dp)

洛谷传送门 文章目录题目描述解析代码题目描述 给出两个数a,b求出[a,b]中各位数字之和能整除原数的数的个数。 1<a<b<1018 解析 容易想到数位dp 但本题的难点是如果只记录数位和sum与取模的结果res&#xff0c;因为取模的除数发生改变&#xff0c;难以转移 如何解决…

线性代数(矩阵、高斯、线性基……)

矩阵 矩阵加法&#xff1a; 相同位置相加。 矩阵乘法&#xff1a; 满足分配率、结合律&#xff0c;不满足交换律(矩阵与逆矩阵之间除外) 。 矩阵转置&#xff1a; 记矩阵为 \(A\) &#xff0c;则 \(A\) 的转置记为 \(A^T\) 。 性质&#xff1a; \[{(A^T)}^TA \]\[{(AB)}^TA^TB^…

Tavan

Tavan–简单的k进制题 呵呵真的简单 也就是考试没做出来罢了&#xff0c;不慌不慌&#xff0c;奶我一口&#xff0c;还能活 【题目摘要】 题目描述 小 Zeljko 一直在阁楼里读他奶奶的旧信&#xff0c;并且发现了一个长度为 N 的单词。 不幸的是&#xff0c;由于溢出的墨水&…

.NET Core 2.x中使用Named Options处理多个强类型配置实例

来源&#xff1a; Using multiple instances of strongly-typed settings with named options in .NET Core 2.x作者&#xff1a; Andrew Lock译者&#xff1a; Lamond Lu.NET Core从1.0版本开始&#xff0c;就已经开始使用Options模式绑定强类型配置对象。从那时起到现在&…

CF235D-Graph Game【LCA,数学期望】

正题 题目链接:https://www.luogu.com.cn/problem/CF235D 题目大意 给出一棵基环树&#xff0c;每次随机选择一个点让权值加上这个点的连通块大小然后删掉这个点。 求删光所有点时期望权值。 1≤n≤30001\leq n\leq 30001≤n≤3000 解题思路 先找到环&#xff0c;然后考虑暴…

YBTOJ:魔法数字(数位dp)

文章目录题目描述解析题目描述 解析 迷惑。。。 首先&#xff0c;比较容易想到用二进制状态压缩记录1-9是否在十进制中出现过 然后就是整除的问题 如果记录余数&#xff0c;它的模数又有9个 开九维余数直接爆炸。。。 怎么办嘞&#xff1f; 有一个结论&#xff1a; 若&#xf…

斯特林数

第一类斯特林数 咕咕咕 第二类斯特林数 定义&#xff1a;把 \(n\) 个不同的球放入 \(r\) 个相同的盒子的方案数(盒子不能为空&#xff0c;记为&#xff1a;\(S(n,r)\) 或 \(\begin{Bmatrix}n\\r\end{Bmatrix}\) 。 递推式&#xff1a; \[\begin{Bmatrix}n\\r\end{Bmatrix}\begi…

Prosjecni(构造)

Prosjecni 【题目摘要】 描述 Slavko很无聊&#xff0c;所以他把正整数填到N*N的方阵中。 如果他填出来的方阵满足以下条件&#xff0c;他会特别高兴&#xff1a; ●每行中的数字的平均值是一个位于同一行的整数。 ●每列中的数字的平均值是一个位于同一列的整数。 ●表中的所…

撒花!中文翻译仓库链接已加入 ML.NET 官方示例网站首页

从2018年12月02日决定开始做ML.NET 示例中文版https://github.com/feiyun0112/machinelearning-samples.zh-cn&#xff0c;然后以每天一篇的速度进行翻译&#xff0c;总共耗时15天&#xff0c;将现有的官方实例全部翻译成了中文&#xff0c;并提交了添加中文链接PR&#xff0c;…

P3803 【模板】多项式乘法(FFT)

P3803 【模板】多项式乘法&#xff08;FFT&#xff09; 题目描述 给定一个 n 次多项式 F(x)&#xff0c;和一个 m 次多项式 G(x)。 请求出 F(x)和 G(x)的卷积。 从低到高输出F(x)*G(x)的系数 另一种问法&#xff1a; 如果有两个无限序列a和b&#xff0c;那么它们卷积的结果是…

CF666E-Forensic Examination【广义SAM,线段树合并】

正题 题目链接:https://www.luogu.com.cn/problem/CF666E 解题思路 给出一个串SSS和nnn个串TiT_iTi​。mmm次询问Sa∼bS_{a\sim b}Sa∼b​在Tl∼rT_{l\sim r}Tl∼r​中出现的最多次数并且输出这个串的编号。 1≤∣s∣≤5105,∑Ti≤5104,1≤m≤51051\leq |s|\leq 5\times 10^5…

简简单单组合数学

简简单单组合数学 P3158 [CQOI2011]放棋子 \(\uparrow\) 假组合数学&#xff0c;真 \(\text{DP}\) 。 \(f[i][j][k]\) : 用了 \(i\) 行 \(j\) 列&#xff0c;涂了前 \(k\) 种颜色的方案数。 \(g[i][j][k]\) : 用了 \(i\) 行 \(j\) 列&#xff0c;涂了第 \(k\) 种颜色的方案数(用…