乘法逆元一

乘法逆元一乘法逆元一导入 分数取模考虑一个式子 x equiv dfrac 1 2 mod 7 即求一个数 x 它与 dfrac 1 2 模 7 的结果相同 称为 x 与 dfrac 1 2 对模 7 同余 分数取模不同于整数取模 但我们仍可以利用模运算的性质解决此题 模运算时两边同乘相同的数 两边仍然同余 所以将两边同乘

乘法逆元一

导入:分数取模

考虑一个式子 \(x \equiv \dfrac{1}{2}\ (mod\ 7)\) ,即求一个数 \(x\) ,它与 \(\dfrac{1}{2}\) 模 7 的结果相同,称为 \(x\)\(\dfrac{1}{2}\) 对模 7 同余。

分数取模不同于整数取模,但我们仍可以利用模运算的性质解决此题。

模运算时两边同乘相同的数, 两边仍然同余。

所以将两边同乘 2,原式即化简为 \(2x\equiv 1\ (mod\ 7)\) ,即求解方程组 \(2x-7y = 1\)

因为 \(gcd(2,7)=1\),所以接下来使用扩展欧几里得算法就可以解决。

简述:乘法逆元的定义

如果在一个群 \(G\) 中,对于一个数 \(b\) , 存在乘法逆元且为 \(x\) , 那么就有 \(bx=xb=e\) ,其中 \(e\) 为群 \(G\) 的单位元。

对于单位元 \(e\) 我们有 \(eb=be=b\)

定义太多不看版:

就是说如果 \(x\) 是数 \(b\) 的乘法逆元,那么 \(a*b*x=a\)

考虑有理数域(理解为全体有理数构成的集合,所有选择的数都是里面的),对于一个数 \(b\) ,它的逆元就是 \(\dfrac{1}{b}\) (注意这里不是模运算意义下的逆元),而这里的单位元就是数字 1.

主线:模运算意义下的乘法逆元

首先,我们假设模数为一个质数,记为 \(p\) 。(模数为质数这个条件非常重要,在求解乘法逆元时我们会看到)

然后,接下来的讨论,我们都是在模意义下。(注意,之后的单个字母,表示的都是整数)

那么,我们定义一个数 \(b\) 的乘法逆元为\(x\) ,当且仅当 \(bx\equiv1\ (mod\ p)\)

为什么会这么定义呢?

显然,我们有 \(a*b*x\equiv a\ (mod\ p)\) ,这不就是乘法逆元的定义吗,只不过是在模运算下的。

这样有什么用呢?

考虑式 \(x\equiv \dfrac{1}{b}\ (mod\ p)\)

两边同乘 \(a\) ,得到 \(ax\equiv \dfrac{a}{b}\ (mod\ p)\)

…对比一下分数取模中的式子,是不是感觉有点熟悉…

最简单的,我们发现了,数 \(b\) 的乘法逆元 \(x\) ,在模意义下,同余于 \(\dfrac{1}{b}\) ,即前文的 \(x\equiv \dfrac{1}{b} \ (mod\ p)\)

进一步,我们发现,这样就可以清楚地定义分数取模的解决方法了。

对于式子 \(c\equiv \dfrac{a}{b}\ (mod\ p)\) ,我们只需要计算 \(b\) 的乘法逆元 \(x\) ,那么原式就可以化简为 \(c\equiv ax\ (mod\ p)\)

前行:关于乘法逆元的求解

如果模数 \(p\) 为质数

首先,根据费马小定理,我们有 \(b^{p-1}\equiv 1\ (mod\ p)\)

…显然,数 \(b\) 的逆元即为 \(b^{p-2}\)

如果 \(p\) 不为质数呢

费马小定理只适用于 \(p\) 为质数的情况,但是,我们有更通用的算法,欧拉定理。

如果 \(p\)\(b\) 互质,那么我们就可以使用欧拉定理来求解。

欧拉定理的表示如下 \(b^{\varphi(p)-1}\equiv1\ (mod\ p)\)

其中 \(\varphi(x)\) 定义为 1 到 \(x\) 之间与 \(x\) 互质的数的个数。

当然,也可以使用扩展欧几里得算法。

那么,如果 \(p\)\(b\) 不互质呢?

往下看。

深入:关于模意义下乘法逆元更深层的一些讨论

1. 模逆元的存在性:当 \(p\)\(b\) 不互质时,模意义下的乘法逆元,不存在

我们回顾一下乘法逆元的定义:我们定义一个数 \(b\) 的乘法逆元为\(x\) ,当且仅当 \(bx\equiv1\ (mod\ p)\)

我们改写一下这个式子: \((kr)*x -1=cr\) ,其中 \(r=gcd(p,b)\neq 1\)\(kr=b\)\(cr=q*p\) ( \(p\) 的某个倍数)

..好了,已经可以发现 \(kr*x\)\(cr\) 都为 \(r\) 的倍数,但是因为 \(r\neq1\) ,所以 \(1\) 不为 \(r\) 的倍数。

这说明等式不成立,即乘法逆元不存在。

2.模逆元 \(x\) 一定为整数吗

首先,模逆元定义为 \(x\) 整数。

其次,定义为分数并没有解决问题,比如我有 \(b*\dfrac{1}{b}\equiv1\ (mod\ p)\)

可以知道的是,模运算对于加减乘三种运算具有很好的性质,但是对于除法却不是很好,所以我们是要将除法化为乘法。

3.在OI中的应用

我们知道,在OI中,通常数据是有限制的,此时出题人一般会给你一个模数 \(p\)

比如计数类问题,还有分数需要保持精度的问题。

而模运算将除法变成乘法后,就可以有效利用乘法在模运算中的性质,举例:

我们要计算 \(\dfrac{a}{b}\ mod\ p\) ,就可以化为 \(((a\ mod\ p)*(x\ mod\ p))\ mod\ p\) ,其中 \(x\)\(a\) 的逆元。

这样就可以大幅度降低数据大小,同时保证除法的精度。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233109.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue.js和react.js_vue和jquery

    vue.js和react.js_vue和jqueryjquery和框架的区别框架:数据和视图分离,以数据驱动视图,只关心数据变化,dom操作被封装。数据驱动jquery:依靠dom操作去组合业务逻辑。事件驱动React和Vue对比两者本质区别Vue—本质是MVVM框架,由MVC发展而来React—本质是前端组件化框架,由后端组件化发展而来模板的区别Vue—使用模板(最初由Angular提出)React—使用JSX模板语法…

    2022年9月25日
    3
  • android游戏引擎andengine学习系列三:绘制游戏虚拟摇杆

    android游戏引擎andengine学习系列三:绘制游戏虚拟摇杆如何高效的学习,这才是我们最值得去学习的。  andengine中绘制虚拟游戏摇杆非常简单,只需要实现AnalogOnScreenControl模拟摇杆类,在设置一些属性即可。先看效果图:左边的摇杆是控制精灵上下左右移动,右边的摇杆空值精灵的旋转。代码结构跟andengine学习系列二一样,其中很多注释在系列二中有说明,在该章内便不多复述。onLoadEngine()方法:

    2025年12月10日
    4
  • 操作系统发展史

    手工操作——穿孔卡片1946年第一台计算机诞生–20世纪50年代中期,计算机工作还在采用手工操作方式。此时还没有操作系统的概念。程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然

    2022年3月29日
    50
  • 数据仓库之DWD层

    数据仓库之DWD层DWD(DataWareHouseDetail)数据明细层,主要是将从业务数据库中同步过来的ODS层数据进行清洗和整合成相应的事实表。事实表作为数据仓库维度建模的核心,需要紧紧围绕着业务过程来设计。在拿到业务系统的表结构后,进行大概的梳理,再与业务方沟通整个业务过程的流转过程,对业务的整个生命周期进行分析,明确关键的业务步骤,在能满足业务需求的前提下,尽可能设计出更通用的模型。业务方有时只仅仅只是考虑了当下的情况。例如业务想要一个审核通过人员的明细数据,我们设计了一个全量的审核明细表,过了几天,业务

    2022年6月26日
    43
  • compound extreme_particular conditions

    compound extreme_particular conditions在看SpringSide代码过程中,发现SS使用了extremecomponents于是,今天看了看extremecomponents的使用,发觉extremecomponents真是个好用西。可以直接接受response的数据。按照test例子自己做的:效果不错哟eXtremeTable是一个可扩展的用于以表格的形式来显示数据的一组JSP标签库.网站:http://www.extreme…

    2022年8月20日
    7
  • ViewPager实现画廊效果「建议收藏」

    ViewPager实现画廊效果「建议收藏」开个头关键类publicclassMyPageTransformerimplementsViewPager.PageTransformer{privatestaticfinalfloatMIN_SCALE_X=1.0f;privatestaticfinalfloatMIN_SCALE_Y=0.8f;privatesta…

    2022年5月30日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号