乘法逆元一

乘法逆元一乘法逆元一导入 分数取模考虑一个式子 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python 请在微信客户端打开_(未解决)jmeter报错之“请在微信客户端打开链接”

    python 请在微信客户端打开_(未解决)jmeter报错之“请在微信客户端打开链接”这是一个还没解决的问题,这里纯粹记录自己思考的过程,后续给自己参考。先说明情景:对微信公众号的一个接口进行调用跑通,后续可能需要压测(是的,仅仅是调通一个接口而已o(╥﹏╥)o)1、按照我理解的正常套路,我直接请求对应的接口,然后通过抓包得到Cookie,写入到HTTPCookie管理器中,如下:emmmm….开始百度,发现也有类似的提问,但是没有一个靠谱有效的答案。然后我就去分析登录过程了…

    2022年5月2日
    50
  • iOS的QuickTime Plugin

    当UIWebView播放视频时,可以看到viewhierarchy里有FigPluginView的身影。这个类来自于QuickTimePlugin,plugin的路径为:/Application

    2021年12月24日
    47
  • android之interpolator的用法详解

    android:interpolator    Interpolator 被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果accelerated(加速),decelerated(减速),repeated(重复),bounced(弹跳)等。  android中的文档内容如下:   AccelerateDecelerateInterpolator 在动画开始与介绍的地

    2022年3月10日
    190
  • MMC卡的详细介绍

    MMC卡的详细介绍1.了解MMC卡MMC卡是有由美国SANDISK公司和德国西门子公司在1997年共同开发研制的一种多功能存储卡。MMC卡采用7针的接口,主要应用于数码相机、手机和一些PDA产品上,价格相对较贵。MMC卡在一定程度上改善了CF卡读写速度较慢的缺点,并且体积轻巧,尺寸为32mm×24mm×1.4mm,重量不足2克。其抗冲击性强,可反复读写30万次。MMC卡4.0标准提供了更宽的数据

    2022年6月6日
    180
  • 初次尝试多种源码管理软件

    初次尝试多种源码管理软件

    2021年7月21日
    67
  • java中pageInfo分页带条件查询+查询条件的回显「建议收藏」

    java中pageInfo分页带条件查询+查询条件的回显「建议收藏」代码如下:解析在下边<%--CreatedbyIntelliJIDEA.User:AdministratorDate:2018/1/17Time:19:10TochangethistemplateuseFile|Settings|FileTemplates.--%>Title

    2025年7月1日
    3

发表回复

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

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