当前位置: 首页 > news >正文

数论专题-逆元

本篇博客是【数论专题】系列的第 \(7\) 篇,希望大家多多支持。

\(a\times x\equiv 1\pmod p\),并且 \(a, p\) 互质,则称 \(a\)\(p\) 的乘法逆元为 \(x\),记作 \(a^{-1}\)

费马小定理求逆元

注意,当模数 \(p\) 是质数且 \(a\ne 0\) 时,才可使用费马小定理求逆元。

根据费马小定理:

\[a^{p - 1}\equiv 1\pmod p \]

因此:

\[a\times a^{p - 2}\equiv 1\pmod p\\ \]

很明显,此时 \(a^{p - 2}\) 即为 \(a^{-1}\)

使用快速幂求出 \(a^{p - 2}\bmod\ p\) 即可,时间复杂度 \(O(\log p)\)

int qpow(int a, int b, int mod)
{int ans = 1;while(b){if(b & 1) ans = ans * a % mod;a = a * a % mod;b >>= 1;}return ans;
}//快速幂模板
int get_inv(int a, int p)
{return qpow(a, p - 2, p);//求出逆元
}

扩展欧几里得算法求逆元

\(a\times x\equiv 1 \pmod p\) 可以转化为求解 \(a\times x + p\times y = \gcd(a, p) = 1\)(当 \(\gcd(a, p) = 1\) 才有解,这也符合逆元的定义)。那么,可以使用扩展欧几里得算法求解。

但是,求解出来的 \(x\) 可能是负数,需要通过累加 \(p\) 来处理一下。

void exgcd(int a, int b)//扩展欧几里得算法模板
{if(b == 0){x = 1, y = 0;return;}exgcd(b, a % b);int tmp = x;x = y;y = tmp - a / b * y;
}
int get_inv(int a, int p)
{exgcd(a, p);return (x % p + p) % p;//使 x 变为最小正整数解
}

递推求逆元

\(p = k\times i + r, r < i, 1 < i < p\),然后把这个式子放在 \(\bmod\ p\) 意义下可以得到:

\[k\times i + r \equiv 0\pmod p \]

将两边同时乘上 \(i^{-1}\)\(r^{-1}\) 可以得到:

\[\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ k\times r^{-1} + i^{-1}\equiv 0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \pmod p\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ i^{-1}\equiv -k\times r ^ {-1}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \pmod p\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ i^{-1}\equiv - \lfloor \frac{p}{i} \rfloor \times (p\bmod\ i)^{-1}\pmod p \]

通过这个式子即可从前面的数推出当前数的逆元。

void get_inv(int n, int p)
{inv[1] = 1;//初始值for(int i = 2;i <= n;i ++) inv[i] = (p - p / i) * inv[p % i] % p;//递推式
}
http://www.sczhlp.com/news/13603/

相关文章:

  • 2025年8月第3周AI资讯
  • 数论专题-质数与判断质数
  • Temp
  • ABC419_E,F题解
  • Rider相关
  • WGCLOUD有没有手机端APP
  • 别惊讶!油车的魅力正在大幅上升
  • 实用指南:[已解决]当启动 Spring Boot 应用时出现 Using generated security password xxx提示
  • Qt/C++开发监控GB28181系统/国标拉流后推流/网页实时预览/播放器打开/预览推流/录像回放推流
  • MCU 与 SoC:一颗芯片的不同命运 —— 嵌入式开发者必懂的核心认知
  • 国产光刻机交付500台,成立仅半年?
  • 8.18
  • 星穹铁道
  • NebulaGraph 存储 = 自研 KVStore + RocksDB
  • Windows Server 2019 OVF (2025 年 8 月更新) - VMware 虚拟机模板
  • 8-17
  • 宇树机器人“撞人逃逸”火到国外,王兴兴回应:下次不遥控了
  • STM32F103C6T6(中等容量)所有定时器的引脚分配表
  • 贪心的小on
  • 洛谷CF587C Duff in the Army题解
  • 英伟达GPU参数速查表(完整版)
  • 02011601 接口01-声明和实现接口、IComparable接口、接口引用和as运算符
  • (同余最短路)[arc084_b]Small Multiple
  • 02011601 接口01-声明和实现接口、IComparable接口、接口引用和类对象引用
  • 题解:深黯「军团」
  • Three.js实例化技术:高效渲染数千3D对象
  • 智慧农业(卫星遥感技术)
  • 快速切换jdk版本
  • 美团2026.8.16笔试个人题解
  • STM32F103C6T6资源列表