乘法逆元
乘法逆元
定义
对于一个线性同余方程
费马小定理求逆元
对于
得
于是可以用快速幂求解
il int qpow(int a,int b,int p){
ri int as=1;
while(b>0){
if(b&1) as=as*a%p;
a=a*a%p,b>>=1;
}
return as;
}
il int Inv(int a,int p){
return qpow(a,p-2,p);
}
扩展欧几里得法求逆元
递归解线性同余方程
il void exgcd(cs int a,cs int b,int &x,int &y,int &g){
if(!b) return x=1,y=0,g=a,void();
return exgcd(b,a%b,y,x,g),y-=x*(a/b),void();
}
il int Inv(int a,int p){
int x=0,y=0,g=0;
exgcd(a,p,x,y,g);
return (x%p+p)%p;
}
线性求1~n的逆元
il void solve(int n,int p){
inv[1]=1;
for(ri int i=2;i<=n;++i){
inv[i]=(-p/i*inv[p%i]%p+p)%p;
}
return;
}
线性求任意n个数的逆元
首先计算
因为
同理我们可以依次计算出所有的
所以我们就在
il void solve(int n,int p){
s[0]=1;
for(ri int i=1;i<=n;++i){
s[i]=s[i-1]*a[i]%p;
}
sv[n]=Inv(s[i],p);
for(ri int i=n;i;--i){
sv[i-1]=sv[i]*a[i]%p;
}
for(ri int i=1;i<=n;++i){
inv[i]=s[i-1]*sv[i]%p;
}
return;
}
I went to the woods because I wanted to live deliberately, I wanted to live deep and suck out all the marrow of life, and not when I had come to die, discover that I had not live.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现