乘法逆元

也挺简单

定义:

a,m 互质,且满足:

a×x1(modm)

则称 xamodb 意义下的乘法逆元,也记为 a1

用途:

主要用于 xymodm 求值,一般是因为无法化简(例如数太大。

求法:

1. exgcd:

ax1(modm)

转化得:

ax+my=1

运用 exgcd 求解即可。

CODE(点击查看)
void exgcd(int a,int b,int &x,int &y){
if(b==0) x=1,y=0;
else exgcd(b,a%b,y,x),y-=a/b*x;
}
int main(){
int a,m; scanf("%d%d",&a,&m);
int x,y;
exgcd(a,m,x,y);
printf("%d",(x%m+m)%m); //注意x的取值范围。
}

2.费马小定理(m是质数):

费马小定理

我们将费马小定理带入原式,得:

axam1(modm)

xam1÷a(modm)

xam2(modm)

所以我们只需求 am2 即可,用快速幂。

COED(点击查看)
inline int fpow(int a,int b,int mod){
int ans=1;
while(b){
if(b&1) ans=a*ans%mod;
a=a*a%mod;
b>>=1;
}
return ans%mod;
}
int main(){
int a,m; scanf("%d%d",&a,&m);
printf("%d",fpow(a,m-2,m));
}

3.线性求法(求得 1 ~ n ):

这种方法在但求一个时慢于前两种,但求 1 到 n 是优于前两种例题
m=k×a+r(1r<a<m)
于是有:

ka+r0(modm)

乘上 r1,a1 ,得:

kr1+a10(modm)

a1kr1(modm)

a1ma×(mmoda)1(modm)

我们又知道,111 于是就可以线性推了。

CODE(例题,点击查看)
#include<bits/stdc++.h>
using namespace std;
const int N=3e6+5;
long long n,p,inv[N];
template<typename T>
inline void read(T &x){
char s=getchar();x=0;bool pd=false;
while(s<'0'||'9'<s){if(s=='-') pd=true;s=getchar();}
while('0'<=s&&s<='9')x=(x<<1)+(x<<3)+(s^48),s=getchar();
if(pd) x=-x;
}
int main(){
read(n),read(p);
inv[1]=1;
for(int i=2;i<=n;i++)
inv[i]=(p-p/i)*inv[p%i]%p;
for(int i=1;i<=n;i++)
printf("%lld\n",inv[i]);
}
CODE(主要代码,点击查看)
inv[1]=1;
for(int i=2;i<=n;i++)
inv[i]=(p-p/i)*inv[p%i]%p;

4.阶乘求逆元:

求:1! 到 n! 的逆元。
给出一个式子,其中 v(i) 表示 i 的逆元。

v((i1)!)=1(i1)!=1i!i=v(i!)i

于是乎又可以线性推了。

然而这种做法还可以求 l 到 r 的逆元。
具体的:

v(i)=1i=1i!×(i1)!=v(i!)×(i1)!

然后可求。


附:有趣的题:

给定一个长度为 n 的序列 a ,求 a1 到 an 所有数的乘法逆元。
1n5e6 (要求复杂度 On
做法:
先维护前缀积 qi
通过:

qi1×ai=1j=1iaj×ai=qi11

推得 q1 的值。
然后通过:

qi1×qi1=1j=1iaj×j=1i1aj=ai1

得解。

参考 https://www.cnblogs.com/zjp-shadow/p/7773566.html

posted @   5k_sync_closer  阅读(58)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示