数学/数论专题-学习笔记:乘法逆元

1. 前言

本篇文章是作者学习乘法逆元的时候的一些学习笔记。

前置知识:同余式,一些简单的数论符号。

2. 详解

2.1 定义+作用

乘法逆元的定义如下:对于任意 aN+,若存在 aN+ 使得 ax1(modp),则称 ax 在模 p 意义下的数论倒数或者是乘法逆元,将 a 记作 x1

实际上你会发现这玩意跟实数域上的倒数定义差不多,都是相乘为 1qwq

但是需要注意的是,并不是所有 x 在模 p 意义下都有逆元,如果 px,那么 x 在模 p 意义下是没有逆元的,因为一定有 ax0(modp)

下面若无特殊说明,均认为任意数 x 在模 p 意义下有乘法逆元。

乘法逆元的一个很重要的作用就是做有理数域内的取模问题。

如果我们要求 abmodp,那么根据 1b=b1,我们可以将式子变为 a×b1modp,这样就可以通过求出 b1 来解决有理数取模问题。

乘法逆元的求法有三种:exgcd 求法,快速幂求法,线性递推式。

2.2 exgcd 求法

这个求法的前置知识:扩展欧几里得算法。

如果不知道可以看百度百科或者我写的博客

对于同余式 ax1(modp),我们可以将该式转变为 ax+py=1,x,yZ

这样就可以通过 exgcd 求出该不定方程的特解,然后就可以求出乘法逆元了。

该方法的使用范围:gcd(a,p)=1

Code:

void exgcd(int a, int b, LL &x, LL &y)
{
    if (b == 0) {x = 1; y = 0; return ;}
    exgcd(b, a % b, x, y);
    LL p = x; x = y; y = p - ((LL)a / b) * y;
}

2.3 快速幂求法

这个求法的前置知识:费马小定理。

描述如下:如果 pPrime,那么 ap11(modp)

那么因此我们就可以考虑求逆元的时候对式子做个变形:

a×a1×ap11(modp)

a×ap21(modp)

因此 a 的逆元是 ap2

事实上这玩意你还可以用欧拉定理/扩展欧拉定理来推广,但是复杂度会升至根号级别,不如用第一种方法。

快速幂求法的使用范围:pPrime

该方法对于确定模数为质数(如 998244353)的题目比较方便。

Code:

LL ksm(LL fir, LL sec, LL p)
{
    LL ans = 1 % p;
    for (; sec; sec >>= 1, fir = fir * fir % p)
        if (sec & 1) ans = ans * fir % p;
    return ans;
}

2.4 线性递推式

前置知识:无。

这个算法可以 O(n) 求出 [1.n] 内的所有数的乘法逆元。

首先显然的,11=1

接下来假设我们已经处理好了所有 [1,n1](n>1) 范围内的数的乘法逆元,要求 n1

k=pn,j=pmodn,那么 p=kn+j

那么有 kn+j0(modp)

两边同时乘上 n1×j1,有 kj1+n10(modp)

移项,n1kj1pn×(pmodn)1

由于 pmodn<n,那么我们可以知道要求 n1 只需要知道所有 [1,n1] 内数的逆元。

因此原假设成立。

于是我们可以 O(n) 求出 [1,n] 内的数的逆元。

该算法的使用范围:任意。

注意如果 pii1 无意义,因此特别注意这种情况。

P3811 【模板】乘法逆元

Code:

inv[1] = 1;
for (int i = 2; i <= n; ++i) inv[i] = (p - p / i) * inv[p % i] % p;

2.5 阶乘及其逆元

在一般的计数题中我们通常需要预处理 1n 的阶乘及其逆元,然后如果处理出阶乘之后每个数单独求逆元复杂度就是 O(nlogP),在某些时间卡的比较紧的题目里面会过不去。

然而设 invi 表示 i! 的逆元,就有如下递推式:invi=invi+1×(i+1)

这样只需要做一遍快速幂/exgcd,就是 O(n+logP)

3. 总结

  • 乘法逆元:对于任意 aN+,若存在 aN+ 使得 ax1(modp),则称 ax 在模 p 意义下的数论倒数或者是乘法逆元,将 a 记作 x1
  • 三种求法:exgcd 求法,快速幂求法,线性递推式。
posted @   Plozia  阅读(179)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示