首页 > 其他分享 >[笔记]模意义下的除法逆元

[笔记]模意义下的除法逆元

时间:2024-04-22 22:37:52浏览次数:14  
标签:除法 frac 笔记 逆元 ax 12 mod equiv

一些题目在涉及到超大整数运算时,往往会要求我们把答案取模一个值,比如\(998244353\)、\(10^9+7\)等等。如果我们的计算只有\(+,-,*\),直接现算现取模即可:

(a + b) % mod = (a % mod + b % mod) % mod
(a - b) % mod = (a % mod - b % mod + mod) % mod
(a * b) % mod = (a * mod - b * mod) % mod

但如果遇到除法,我们就没法这么做了:
\(\frac{5}{3}*12\ mod\ 11=\ ?\)
\(\frac{10}{9}*81\ mod\ 13=\ ?\)
显然如果我们对分子和分母同时\(mod\ 11\)是没用的,还可能出现除不尽的情况。

所以我们思考:在模\(p\)意义之下,如果能把\(\frac{a}{b}*c\)转化成\(a*x*c\),而取模结果不变就好了。

这个\(x\)即为乘法运算中,模\(p\)意义下,\(b\)的逆元。

换句话说,\(x\)就是模\(p\)意义下\(b\)的倒数(也可写作\(b^{-1}\)),所以有
\(b*x\equiv 1(mod\ p)\)
所以我们要求\(b^{-1}\),其实就是求满足上面这个式子的\(x\)。

举例:

\(\frac{5}{3}*12\ mod\ 11=\ 9\\ 5*4*12\ mod\ 11=\ 9\)
(模\(3\)意义下\(3^{-1}=4\))

\(\frac{10}{9}*81\ mod\ 13=\ 12\\ 10*3*81\ mod\ 13=\ 12\)
(模\(13\)意义下\(9^{-1}=12\))


具体求法共有\(3\)种:

  • 费马小定理
  • 扩展欧几里得
  • 线性递推

注意

  • 模意义下除法逆元在\([0,p-1]\)范围内有一个,\([-p,-1],[p,2p-1],[2p,3p-1]\)等等都各有一个(举例:\(3*2\equiv 3*7\equiv 3*12\equiv …\equiv 1(mod\ 5)\))。但我们为了方便使用,一般都定义逆元在\([0,p-1]\)范围内,是唯一存在的。
  • 模\(p\)意义下\(a^{-1}\)存在的充分必要条件是\((a,p)=1\),即\(a,p\)互质。
    所以,并不是\(p\)不为质数就没有逆元,也不是\(p\)为质数就一定存在逆元。
    证明 若$(a,p)\neq 1$,$a^{-1}*a\equiv 1(mod\ p)$显然不成立。

费马小定理

定理内容:如果\(p\)是质数,则对于所有\((a,p)=1\),有\(a^{p-1}\equiv 1(mod\ p)\)。
注:\((a,b)\)表示\(a,b\)的最大公因数。

转化一下,\(a^{p-2}*a\equiv 1(mod\ p)\)。
这个形式很熟悉?没错,\(a^{p-2}\ mod\ p\)就是模\(p\)意义下\(a\)的逆元。

使用快速幂来求,时间复杂度\(O(\log p)\)。

注意:仅限于\(p\)为质数。

扩展欧几里得

扩展欧几里得算法本质上是辗转相除法(欧几里得算法)的扩展,其内容是:对于两个整数\(a,b\),必有\(x,y\)使得\(ax+by=(a,b)\)。

怎么与逆元挂钩呢?我们设模\(p\)意义下\(a^{-1}=x\),那么有\(a*x\equiv 1(mod\ p)\),即\(ax=py+1\),由于\(y\)可正可负,我们可以\(ax+py=1\)。刚才提到了^ 模\(p\)意义下\(a^{-1}\)存在的充分必要条件是\((a,p)=1\),所以其实\(ax+py=(a,p)\)。满足扩展欧几里得的条件。

由于这是一个不定方程,所以会有多个解,我们前面提到过用最小的非负\(x\)作为逆元(^ 为了方便使用,一般都定义逆元在\([0,p-1]\)范围内,是唯一存在)。

接下来我们解这个不定方程:

  • 根据辗转相除法,\((a,p)=(p,a\ mod\ p)\)。
  • 故\(ax_1+py_1=px_2+(a\ mod\ p)y_2\)。
  • \(ax_1+py_1=px_2+(a-\lfloor \frac{a}{p}\rfloor p)y_2\)。
  • \(\textcolor{magenta}{ax_1}+py_1=px_2+\textcolor{magenta}{ay_2}-\lfloor \frac{a}{p}\rfloor p y_2\)
  • 那么,满足下列条件:\(\begin{cases} x_1=y_2\\ y_1=x_2-\lfloor \frac{a}{p}\rfloor y_2 \end{cases}\)的情况下,如果\(x_2,y_2\)满足要求,那么\(x_1,y_1\)一样也满足要求。

所以,我们可以通过不断递归调用求出我们想要的\(x_1,x_2\)。每次递归提供a,b,&x,&y。后两个参数只是引用,用于在上一层把结果进行转换(就是用上面的结论,把下一层计算的\(x_2,y_2\),变成这一层的\(x_1,y_1\))。ab分别对应上面结论中的\(a,p\)。

递归结束条件和辗转相除法一样:\(b=0\)。
此时的\(a\)就是我们所求的\(\gcd\)。
因为\(ax+by=\gcd\),所以\(x=1,y=0\),这就是递归边界。

最终求出的\(x,y\)称为这个不定方程的特解,我们可以通过这个特解求出这个不定方程的通解(无穷多个)。虽然不在模除逆元的范畴,但是有必要一提。


这种已知特解求通解的方法适用于所有二元一次不定方程:这种已知特解求通解的方法适用于所有二元一次不定方程:

若存在\(ax+by=c\),则可以根据特解\(x,y\)求出任意通解\(x',y'\):
\(\begin{cases} x'=x+k*\frac{b}{\gcd(a,b)}\\ y'=y-k*\frac{a}{\gcd(a,b)} \end{cases}(k\in \mathbb{Z})\)

比如\(6*5+4*3=42\),那么\(6*(5-2)+4*(3+3)=42\)等等,正确性显然。

当然我们这里求逆元,无需求出所有通解。只需要最小的非负$x$即可。我们发现求出的$x$可能是负数。所以我们求得的逆元其实是$(x+p)\ mod\ p$。

:经过大量样例测试,发现求出的通解\(x,y\)是有取值范围的:$x∈[-⌊\frac{p}{2}⌋,⌊\frac{p}{2}⌋],y∈[-⌊\frac{a}{2}⌋,⌊\frac{a}{2}⌋] $,但是还不会证明,如果观众们有思路欢迎在评论区讨论。


\(\textbf{[To be continuned...]}\)
\(\color{lightgray}\text{Next Dream...}\)

欢迎留下你的评论,我会认真阅读的!

标签:除法,frac,笔记,逆元,ax,12,mod,equiv
From: https://www.cnblogs.com/Sinktank/p/18148782

相关文章

  • C语言学习笔记
    ​学习C语言是掌握计算机科学的基础,并为学习其他高级编程语言打下坚实的基础。C语言是一种高效率的编程语言,被广泛用于系统软件和应用软件的开发。1、C语言基础变量和数据类型:理解基本数据类型(int,char,float,double等)以及更复杂的类型,如数组和结构体。运算符:熟悉C语言支持......
  • C# 学习笔记
    ​  1、C#基础数据类型和变量:学习如何使用基本数据类型(int,double,char,bool等)以及更复杂的类型(数组、枚举、结构体)。运算符:理解各种运算符(算术运算符、比较运算符、逻辑运算符等)的使用。控制结构:学习使用条件语句(if,switch)和循环结构(for,while,do-while,foreach)来......
  • 软考高项(已通过,E类人才)-学习笔记材料梳理汇总
    软考高项,即软考高级信息系统项目管理师,全国计算机技术与软件专业技术资格(水平)考试中的高级水平测试。适用于从事计算机应用技术、软件、网络、信息系统和信息服务等领域的专业人员,以及各级企业管理人员和从事项目管理事业的相关人士。申请杭州E类人才等用途资源整理地址备注......
  • 大营销笔记
    大营销第三节:策略概率装配处理装配流程装配抽奖策略,根据抽奖策略ID(strategy_id)进行装配子流程如下:根据抽奖策略ID(strategy_id)去数据库查询该策略配置下的奖品列表(strategyAwardEntityList),先从redis中读,如果redis中没有,再去数据库中拿,拿完转完一下实体类,存redis中,并返回......
  • Lustre架构介绍的阅读笔记-客户端
    本文是在阅读IntroductiontoLustre*Architecture的LustreFileSystem–Clients时的笔记。Lustre客户端部署在客户的计算节点上,工作时不占用本地的硬盘。不使用本地硬盘作为缓存或者后备空间。对存储系统的访问均通过网络。Lustre客户端作为Linux内核的模块,工作在内核......
  • Lustre架构介绍的阅读笔记-SMB协议
    本文是在阅读IntroductiontoLustre*Architecture的LustreSMBGatewaySystemArchitecture时的笔记。Lustre只支持Linux系统,但借助Samba可以支持SMB协议,进而对Windows主机提供文件访问能力。参考资料WelcometotheCTDBwebpagesCTDBisaclusterimplementationof......
  • 模型评测-书生浦语大模型实战营学习笔记7&大语言模型10
    大语言模型学习-10.模型评测书生浦语大模型实战营学习笔记7视频教程特别像广告,所以这篇博客参考了很多其他内容给大家参考,主要是下面几个页面:https://zhuanlan.zhihu.com/p/641416694https://www.cnblogs.com/justLittleStar/p/17845341.htmlhttps://zhuanlan.zhihu.com/p/68......
  • 只要2599元!Intel笔记本旗舰i9-13980HX搬上桌面:史上最强mATX小板
    这两年出现了不少集成Intel、AMD笔记本移动处理器的桌面主板,深圳尔英(Erying)更是首次将Intel13代酷睿HX系列放在了mATX小主板之上,标准的244x244毫米尺寸。新板子隶属于PoleStar极星系列,别看面积不大,配置却相当彪悍,比如10相供电电路和一体式散热装甲、四个4针风扇插针,可控制......
  • 低开开发笔记(四):实现编辑器内拖拽
    好家伙,本篇我们来说说,编辑器内如何实现拖拽完整代码已开源https://github.com/Fattiger4399/ph-questionnaire.git  0.效果预览 1.思路1.1.视图操作分析这一块是这一章节最核心的部分到 用户进行了什么操作?(1)点击编辑器中第一个组件(2)松开(3)在setter中修改第一......
  • multi-agent框架camel学习笔记(二)RAG和向量数据库
    本系列想学习如何从零开始搭建一个multi-agent系统并融入到应用中,这篇文章主要写其中的LLM-agent的核心模块RAG和向量数据库,以及Camel系统中是如何使用RAG。1.为什么要用RAG(检索增强生成)先聊下什么是RAG,为什么我们要用RAG:RAG和向量数据库本身不是很新的技术,传统的搜广推里也......