逆元
1 https://www.cnblogs.com/linyujun/p/5194184.html
a和p互质,a才有关于p的逆元
1 //费马小定理(mod一定为质数) 2 ll poww(ll a,ll b,ll mod){ 3 ll ans=1; 4 a%=mod; 5 while(b) 6 { 7 if(b&1) ans=(ans*a)%mod; 8 b>>=1; 9 a=(a*a)%mod; 10 } 11 return ans%mod; 12 } 13 ll inv(ll a,ll mod) 14 { 15 return poww(a,mod-2,mod); 16 } 17 //扩展欧几里得 18
typedef long long LL;
void ex_gcd(LL a, LL b, LL &x, LL &y, LL &d){
if (!b) {d = a, x = 1, y = 0;}
else{
ex_gcd(b, a % b, y, x, d);
y -= x * (a / b);
}
}
LL inv(LL t, LL p){//如果不存在,返回-1
LL d, x, y;
ex_gcd(t, p, x, y, d);
return d == 1 ? (x % p + p) % p : -1;
}
这个方法不限于求单个逆元,比前两个好,它可以在O(n)的复杂度内算出n个数的逆元 递归就是上面的写法,加一个记忆性递归,就可以了 递推这么写 #include<cstdio> const int N = 200000 + 5; const int MOD = (int)1e9 + 7; int inv[N]; int init(){ inv[1] = 1; for(int i = 2; i < N; i ++){ inv[i] = (MOD - MOD / i) * 1ll * inv[MOD % i] % MOD; } } int main(){ init(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现