博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
乘法逆元
阅读量:5019 次
发布时间:2019-06-12

本文共 1700 字,大约阅读时间需要 5 分钟。

重新整理了一下笔记

引入


一个数的逆元就是数论中,该数在模另一个数的意义下的倒数。

这么说或许太抽想了,我们可以看这个:

求组合数 $\Large{\left( ^a_b \right)}$ 取模 $10^9+7$ 的值。

这道题看上去简单,但是我们发现:

组合数是有乘有除的,而我们一般都是先乘完所有的再一个个除,这时就会出事了:

就比如 $\Large{\left( ^{20}_{10} \right)}$,我们可以看出答案是 $\Large{\frac{20!}{10!(20-10)!}}$

首先 $20!$ 肯定超过了 $10^9+7$,因此答案是取模过的。

但是,还有两个 $10!$ 还没有乘上去,可是取模过的数无法直接做除法运算了。

这可怎么办呢?就靠逆元了。


逆元的产生

以模数为 $11$ 为例:

$3*7=21,21 ≡ 10 (\text{mod } 11)$

我们尝试着将 $10$ 乘上一个数,使得它取模 $11$ 还原成 $3.$(实现理论除以 $7$ 的运算)

不难解出答案为 $8.$

那么,$8$ 就是 $7$ 在模 $11$ 意义下的逆元。

因此,在答案模 $11$ 的意义下,实现数除以 $7$ 我们只需要将数乘 $8$ 再取模就可以了。


如何求逆元

① 最好想的:费马小定理求逆元

费马小定理,当 $a$ 与 $p$ 互质且 $p$ 是质数的时候,满足:

$$a^{p-1} ≡ 1 (\text{mod }p)$$

那么,$a^{p-2}$ 就相当于少乘了一个 $a$,也就实现了除 $a$ 的运算。

而右边只有一个 $1$,于是在模 $p$ 意义下 $a$ 的逆元是 $a^{p-2}$,这个可以用快速幂求。

前提条件:$p$ 是质数

但为什么 $a$ 可以与 $p$ 不互质呢?

因为不互质答案就是 $0$ ,虽然不满足费马小定理,但是可以求逆元,不影响结果。

例题:

题意:求有理数 $\frac{a}{b}$ 在模 $19260817$ 意义下的值,$0 \le a,b \le 10^{10001}.$

这道题的亮点就在于 $a,b$ 的规模,面对这种情况,我们一般使用快读处理:

一般的快读(无负数快读):

inline int read(){    int num = 0;    char c = getchar();    while(c < '0' || c > '9')        c = getchar();    while(c >= '0' && c <= '9'){        num = num * 10 + c - '0';        c = getchar();    }    return num;}

在此基础上,我们加一些操作:

因为在模 $19260817$ 的意义下,$\Large{\frac{a}{b}=\frac{a\mod19260817}{b\mod19260817}}$ ,所以我们能在快读的过程中实现数字取模。

快读是一位一位拼上去的,那我们在拼的过程中就拼一次取模一次,就可以实现读入数并且取模了。

inline int read(){    int num = 0;    char c = getchar();    while(c < '0' || c > '9')        c = getchar();    while(c >= '0' && c <= '9'){        num = num * 10 % 19260817 + c - '0';        c = getchar();    }    return num % 19260817;}

剩下的就好办了,在模 $19260817$ 的情况下,$b=0$ 意味无解,否则只需要将 $a$ 乘上 $b$ 的逆元在取模即可。

由于 $19260817$ 是质数,可以用费马小定理求。

转载于:https://www.cnblogs.com/zengpeichen/p/11391831.html

你可能感兴趣的文章
关于公众号JavaTokings侵权声明
查看>>
Android AsyncTask内部线程池异步执行任务机制简要分析
查看>>
mkfs
查看>>
性能测试分享:性能测试工具开发的案例分享
查看>>
vim如何配置go语言环境
查看>>
C# 数字相除
查看>>
Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息...
查看>>
JS控制适配屏幕
查看>>
Linux 的字符串截取
查看>>
Java中的注解的详解
查看>>
Word中特殊字符的使用
查看>>
Get IPv4 Address 1.0
查看>>
程序员趣味读物:谈谈Unicode编码
查看>>
html页面渲染的原理和优化
查看>>
win8中的gridview和listview控件微软链接
查看>>
模块在insmod之后无法rmmod问题
查看>>
TD - 发布/订阅(Publish/Subscribe)
查看>>
2017-12-08 违法数据筛选.sql
查看>>
[Luogu 1640] SCOI2010 连续攻击游戏
查看>>
Ubuntu下的一款Dock工具-AWN
查看>>