tk's blog
  • tk's blog Read Me
  • 算法相关
    • 数据结构
      • 【集训整理】 旋转treap模板
      • 二叉树及相关数据结构的java语言实现
      • 快乐树0x01:AVL树的java实现
      • 快乐树0x02 线段树实现(c++)
      • 链表的Java语言实现
    • 算法
      • DP的背包问题小结-java语言描述
      • 【集训整理】2-SAT问题 模板题
      • 【集训整理】Tarjan算法 模板题
      • 【集训整理】差分约束 模板题
      • 【集训整理】最近公共祖先LCA 模板题
      • 二分查找与二分答案-java实现
      • 动态规划-java语言练习一:暴力DP
      • 快速幂
      • 状态压缩DP-java描述
      • 差分
      • 乘法逆元
    • 题解
      • CFRound-GoodBye2022题解
  • java相关
    • Java与算法竞赛——注意事项摘录
    • java面向对象简要总结 一
    • java面向对象简要总结 三
    • java面向对象简要总结 二
  • 后端相关
    • Linux-Crontab命令
    • Spring Data JPA 使用方法
    • Spring集成Artemis实现JSM的异步消息传递
    • Spring使用自定义配置项
    • MIT6.824分布式系统Lab1.MapReduce笔记
    • MIT6.824分布式系统Lab2-Raft-A笔记
    • MIT6.824分布式系统Lab2-Raft-B笔记
  • 杂谈
    • 杂谈-关于2021
  • 杂项
    • c语言 scanf的返回值
    • 系统设计
  • 计科基础
    • 编译原理
      • 编译原理:词法分析笔记
    • CSAPP 第二章笔记
    • 计算机组成原理笔记
    • CSAPP Lab1. Datalab
    • CSAPP Lab2 Bomblab
  • C++每日一题
    • C++每日一题 Day 1 肥宅水
    • C++每日一题 Day 2 数字反转
    • C++每日一题 Day 3 理五的凡尔赛风气
    • C++每日一题 Day 4 我喜欢这个数
    • C++每日一题 Day 5 数字楼梯
    • C++每日一题 Day 6 插火把
    • C++每日一题 Day 7 贪吃蛇
    • C++每日一题 Day 8 蒙德最强战力
    • C++每日一题 Day 9 璃月七星选举
    • C每日一题 Day 2 肥宅水
    • C每日一题 Day 3 理五的凡尔赛风气
    • C语言每日一题 Day 1 荧妹好感队
由 GitBook 提供支持
在本页
  1. 算法相关
  2. 算法

乘法逆元


数学上乘法逆元的定义是 ax=1,则x是a的乘法逆元ax=1,则x是a的乘法逆元ax=1,则x是a的乘法逆元。

我们这里讨论关于取模运算的乘法逆元。

定义:

满足 axmod  b=1ax\mod b = 1axmodb=1时,称 x为a关于模b的逆元x为a关于模b的逆元x为a关于模b的逆元。

所以逆元有什么用呢?

题目中可能会出现操作中间树很大的情况,如求解:

3∗6/3mod  73 * 6 / 3 \mod 73∗6/3mod7

规定中间变量不能超过7,于是操作步骤为:

原式=((3∗6)mod  7)/3mod  7原式 = ((3*6)\mod 7)/3 \mod 7原式=((3∗6)mod7)/3mod7

=4/3= 4/3=4/3

发现无法整除。

可以求出除数3关于模数7的逆元为5,根据定义,在7模数下,3 * 5 = 1,所以1/3 = 5.

于是我们可以把/3/3/3替换成555,避免了无法整除的问题。

于是问题来到了如何求逆元。

费马小定理:

ab−1mod  b=1a^{b-1} \mod b = 1ab−1modb=1

改写一下:

ab−2∗amod  b=1a^{b-2} * a\mod b = 1ab−2∗amodb=1

所以 ab−2a^{b-2}ab−2 就是a模b的逆元。一般这个数用快速幂来算。

上一页差分下一页题解

最后更新于2年前