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

【学习笔记】强制在线 O(1) 逆元

前置知识:Farey 序列以及其相关理论,根号平衡。

这里稍微提一下什么是 Farey 序列 以及其性质:

  • \(F_n\) 是第 \(n\) 阶的 Farey 序列,序列中存储所有不可约的分母 \(\le n\) 的值在 \([0,1]\) 之间的分数(这里认为 \(\frac01,\frac11\) 也是不可约的分数)按照其值从小到大排序得到的有序分数序列。
  • 性质 \(1\):对于 \(F_{m-1}\) 序列上任意两个相邻分数 \(\frac ab,\frac cd\),在 \(F_m\) 序列上一定按照顺序连续的存在分数 \(\frac ab,\frac{a+c}{b+d},\frac bd\)
    • 推论 \(1\):对于 \(F_m\) 中任意两个相邻分数 \(\frac ab,\frac cd\),必然有 \(bc-ad=1\)
  • 性质 \(2\)\(|F_n|=1+\sum\limits_{i=1}^n\varphi(i)\)
  • 性质 \(3\):对任意整数 \(n\ge 2\) 和任意实数 \(v\in[0,1]\),一定可以在 \(F_{n-1}\) 序列中找到至少一个分数 \(\frac xy\),满足 \(|v-\frac xy|\le \frac1{yn}\)
    • 推论 \(3\):分数 \(\frac xy\) 一定是数 \(v\) 在序列 \(F_{n-1}\) 中向左查或者向右查能找到的第一个分数。
  • 性质 \(4\):对于 \(F_n\) 序列内的每个分数 \(\frac xy\)\(\lfloor\frac{xn^2}{2y}\rfloor\) 的值互不相同。

回到这个题目。考虑固定 \(n\),记 \(v=\frac ap\)。根据上面得到的性质和推论,可以知道此时必然存在一个分数 \(\frac xy\in F_{n-1}\) 满足 \(|\frac ap-\frac xy|\le\frac1{yn}\)。此时把不等式的左右两侧同时乘以 \(py\)(显然有 \(py>0\)),得到:\(|ay-px|\le\lfloor\frac pn\rfloor\)

\(u=ay-px\),则此时又能得出两个结论:

  • \(ay\equiv u\pmod p\)
  • \(|u|\le \lfloor\frac pn\rfloor\)

考虑把上面提到的结论 \(1\) 改写,得到:\(y\equiv u\times a^{-1}\pmod p\)。因为这里想要求的是 \(a\) 在模 \(p\) 意义下的逆元即 \(a^{-1}\),因此想到在同余式两侧同时乘以 \(u^{-1}\),得到:\(a^{-1}\equiv u^{-1}\times y\pmod p\)

然后再利用结论 \(2\)\(|u|\le\lfloor\frac pn\rfloor\) 也就是 \(u\) 的绝对值很小,因此对这样的 \(a\) 只需在对应 Farey 序列上找出其对应的分数 \(\frac xy\),计算 \(u=ay-px\),即可套用公式 \(a^{-1}\equiv u^{-1}y\pmod p\) 解决。而此时 \(u^{-1}\) 可以直接线性求逆元。

然而此时存在 \(u<0\) 的情况。对这个东西的处理是比较容易的,有 \(p^{-1}\equiv -(-p)^{-1}\pmod p\) 然后转化成上一种情况了。

问题在于怎么快速构造 \(n\) 阶 Farey 序列 \(F_n\)。利用性质 \(2\) 可知 \(|F_n|=1+\sum\limits_{i=1}^n\varphi(i)\) 这个东西是 \(O(n^2)\) 量级的,而利用性质 \(4\) 可以想到开桶做到 \(O(V)=O(n^2)\) 排序,因此构造 \(F_n\) 的总时间复杂度为 \(O(n^2)\)

而现在还需要找出 \(n\) 阶 Farey 序列上一个分数 \(\frac xy\) 的前驱 / 后继分数,容易想到直接在值域上维护前缀和,然后简单处理即可 \(O(n^2)-O(1)\) 查询。

因此总时间复杂度分为两个部分:

  • 线性递推 \(\lfloor\frac pn\rfloor\) 以内数的逆元,时间复杂度为 \(O(\lfloor\frac pn\rfloor)\)
  • \(n\) 阶 Farey 序列并在上面做一些处理,时间复杂度为 \(O(n^2)\)

因此总时间复杂度为 \(O(n^2+\lfloor\frac pn\rfloor)\),根号平衡一下就是 \(n^2=\lfloor\frac pn\rfloor\) 解得 \(p=n^{\frac13}\),此时时间复杂度为 \(O(p^{\frac23}+Q)\)

代码实现

namespace Loyalty
{int pre[N], idx, mod, n, m, Inv[N];pair<int, int> frac[N], farey[N];inline void init() { }inline void nr_init(int p){n = cbrt(p), m = n * n;for (int i = 1; i < n; ++i)for (int j = 0; j <= i; ++j){int val = j * m / i;if (!pre[val])pre[val] = 1, frac[val] = {j, i};}for (int i = 1; i <= m; ++i)pre[i] += pre[i - 1];idx = 0;for (int i = 0; i <= m; ++i)if (frac[i].first || frac[i].second)farey[idx++] = frac[i];Inv[0] = Inv[1] = 1;for (int i = 2; i <= p / n; ++i)Inv[i] = 1ll * Inv[p % i] * (p - p / i) % p;mod = p;}inline int inv(int a){int val = 1ll * a * m / mod;if (pre[val] < idx){auto [x, y] = farey[pre[val]];long long w = 1ll * a * y - 1ll * x * mod;if (abs(w) <= mod / n){int inv_t;if (w >= 0)inv_t = Inv[w];elseinv_t = (mod - Inv[-w]) % mod;return 1ll * y * inv_t % mod;}}if (pre[val] - 1 >= 0){auto [x, y] = farey[pre[val] - 1];long long w = 1ll * a * y - 1ll * x * mod;if (abs(w) <= mod / n){int inv_t;if (w >= 0)inv_t = Inv[w];elseinv_t = (mod - Inv[-w]) % mod;return 1ll * y * inv_t % mod;}}throw;return -1;}
}int p, Q, op, ol;namespace Your_Code
{int inv[20][20];inline void init(){for (int i = 2; i < 20; ++i)for (int j = 1; j < i; ++j)inv[i][j] = power(j, i - 2, i);Loyalty::nr_init(p);}inline int solve(int x){if (p < 20)return inv[p][x];return Loyalty::inv(x);}
}

参考文献

alfalfa_w 的文章 科技-在线 \(O(1)\) 逆元。

http://www.jsqmd.com/news/326894/

相关文章:

  • 【学习笔记】Chirp-Z Transform
  • Vue 笔记2
  • 深圳腾讯外包项目组面试题记录
  • 基于留出法和k折交叉验证的多种神经网络分类预测MATLAB程序:代码中共包含人工神经网络(AN...
  • 系统软件领域中的BSS段
  • ue 模拟说话
  • 蚌埠本地生活代运营实测推荐:这4家专业服务商助力商家高效引流
  • 2026年真石漆厂家推荐:外墙漆真石漆、保温真石漆、白色真石漆、外墙仿石漆厂家推荐,赋能建筑外墙美观与防护
  • 【毕业设计】基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • 过程性编程和面向对象编程
  • Java毕设项目推荐-基于Hadoop的大学多媒体教学管理系统基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现【附源码+文档,调试定制服务】
  • 2026年输送机厂家推荐:污泥破碎机、皮带输送机、螺旋输送机、刮板输送机、链板输送机厂家推荐,从定制到运维的全流程方案
  • Java毕设选题推荐:基于Hadoop平台的大学多媒体教学管理系统基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 2026年外墙翻新厂家推荐:别墅外墙翻新、厂房外墙翻新、高端外墙装饰厂家选择指南,老旧墙面改造实用方案
  • 2026 中小民企管理咨询公司推荐榜:战略目标/组织职责/薪酬职级/绩效考核/职业规划/绩效增长/ 人才招聘/销售管理/6S管理/商业模式咨询辅导,山东手把手领衔优选
  • 【课程设计/毕业设计】基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现多媒体教学资源管理系统、数字化教学管理平台、智慧教室管理系统 【附源码、数据库、万字文档】
  • 计算机Java毕设实战-基于springboot+Hadoop平台的大学多媒体教学管理系统多媒体教学资源管理系统、数字化教学管理平台、智慧教室管【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 从理论到实战:MIMO-OFDM 无线通信全套 MATLAB 源码,助你打通技术任督二脉
  • React Native for OpenHarmony:ScrollView 事件流、布局行为与性能优化深度剖析
  • Java毕设项目:基于springboot的宠物领养及健康管理系统(源码+文档,讲解、调试运行,定制等)
  • Java毕设项目:基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • Java计算机毕设之基于springboot+Hadoop平台的大学多媒体教学管理系统基于Hadoop平台的大学多媒体教学管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 【计算机毕业设计案例】基于SpringBoot的大学多媒体教学管理系统的设计与实现基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现(程序+文档+讲解+定制)
  • 亳州本地生活团购代运营精选|三十六行网络科技领衔 4 家实力服务商
  • JuiceSSH让手机秒控 Linux 服务器,cpolar让你告别工位束缚!
  • Redis快速实现布隆过滤器:缓存去重的“智能门卫”
  • 三十六行网络科技铜陵分公司:本地生活全域运营标杆,四大平台综合实力领跑者
  • Qt常用控件指南(8)
  • 计算机Java毕设实战-基于springboot+GIS的旅游信息管理系统基于Web的旅游信息管理系统开发与实战【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 冬令营前交互专练