「科技」在线 O(1) 逆元
问题:固定模数 \(p\),多次回答某个数 \(a\) 的逆元。强制在线。
本文提供一个 \(O(p^{\frac{2}{3}})\) 预处理,\(O(1)\) 查询的做法。
首先定义一下 Farey 序列:记 \(F_{m}\) 表示所有分母不超过 \(m\) 的最简真分数构成的有序数列。例如 \(F_5 = \{\frac{0}{1}, \frac{1}{5}, \frac{1}{4}, \frac{1}{3}, \frac{2}{5}, \frac{1}{2}, \frac{3}{5}, \frac{2}{3}, \frac{3}{4}, \frac{4}{5}, \frac{1}{1}\}\)。可以认为 \(\frac{0}{1}, \frac{1}{1}\) 也是最简真分数。
Farey 序列有一个性质:对于 \(F_m\) 中任意相邻两个分数 \(\frac{x}{y}, \frac{z}{w}\),一定满足 \(yz - xw = 1\)。
事实上,\(F_m\) 可以由 \(F_{m - 1}\) 扩展得到。对于 \(F_{m - 1}\) 中任意相邻两个分数 \(\frac{x}{y}\) 和 \(\frac{z}{w}\),如果 \(y + w = m\),就在这两个分数中间插一个 \(\frac{x + z}{y + w}\),这样就得到了 \(F_m\)。验算一下就能发现上述性质可以归纳证明。
我们只要运用下面的定理,就能解决原问题:
定理:对于任意整数 \(n \ge 2\) 和任意实数 \(v \in [0, 1]\),总是能在 \(F_{n - 1}\) 中找到 \(\frac{x}{y}\),满足 \(|v - \frac{x}{y}| \le \frac{1}{yn}\)。更强地,这个 \(\frac{x}{y}\) 一定是 \(v\) 向前或向后找到的第一个分数。
考虑固定 \(n\),令 \(v = \frac{a}{p}\)。那么就有 \(|\frac{a}{p} - \frac{x}{y}| \le \frac{1}{yn}\)。
两边同乘 \(py\),得到 \(|ay - px| \le \lfloor \frac{p}{n} \rfloor\)。
这意味着 \(ay \equiv u \pmod p\),其中 \(|u| \le \lfloor \frac{p}{n} \rfloor\)。因为 \(a^{-1} = u^{-1}y\),所以只要预处理出所有不超过 \(\lfloor \frac{p}{n} \rfloor\) 的数的逆元即可。
这样还有两个问题:怎么不用排序生成 Farey 序列;怎么 \(O(1)\) 找到 \(\frac{x}{y}\)。
发现序列中所有 \(\lfloor \frac{xn^2}{y} \rfloor\) 互不相同。我们开一个长度为 \(n^2\) 的 01 序列,每一位表示是否存在 \(\lfloor \frac{xn^2}{y} \rfloor\) 等于该下标。这样就可以桶排序;并且查询等价于查一个位置前后的第一个 \(1\),这个只要算一下 01 序列的前缀和即可。
预处理的时间是 \(O(n^2 + \frac{p}{n})\)。令 \(n = p^{\frac{1}{3}}\),我们就得到了 \(O(p^{\frac{2}{3}})\) 预处理,\(O(1)\) 查询的算法。
「科技」在线 O(1) 逆元的更多相关文章
- 「 神器 」在线PDF文件管理工具和图片编辑神器
每天进步一丢丢,连接梦与想 在线PDF文件管理工具 完全免费的PDF文件在线管理工具,其功能包括:合并PDF文件.拆分PDF文件.压缩PDF文件.Office文件转换为PDF文件.PDF文件转换为JP ...
- 一个「学渣」从零开始的Web前端自学之路
从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的“丰富”. 最后的机缘巧合下,走上了前端开发之路,作为一个非计算机专业且低 ...
- 36氪首发 | 「myShape」完成千万级人民币 Pre-A轮融资,推出 AI 智能健身私教
无需任何可穿戴设备. 36氪获悉,myShape(原Shapejoy)已于近期完成千万级人民币的Pre-A轮融资,由天奇阿米巴领投,远洋集团.七熹资本以及老股东跟投.过去 myShape 曾获得元迅资 ...
- 《Offer一箩筐》一份高质量「简历」撰写指南,望打扰!!
「MoreThanJava」 宣扬的是 「学习,不止 CODE」. 如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力! Hi~ 这里是 ...
- 「2014-2-26」Unicode vs. UTF-8 etc.
目测是个老问题了.随便一搜,网上各种总结过.这里不辞啰嗦,尽量简洁的备忘一下. 几个链接,有道云笔记链接,都是知乎上几个问题的摘录:阮一峰的日志,1-5 还是值得参考,但是之后的部分则混淆了 Wind ...
- 「luogu4462」[CQOI2018] 异或序列
「luogu4462」[CQOI2018]异或序列 一句话题意 输入 \(n\) 个数,给定\(k\),共 \(m\) 组询问,输出第 \(i\) 组询问 \(l_i\) \(r_i\) 中有多少个连 ...
- LOJ #2116 Luogu P3241「HNOI2015」开店
好久没写数据结构了 来补一发 果然写的时候思路极其混乱.... LOJ #2116 Luogu P3241 题意 $ Q$次询问,求树上点的颜色在$ [L,R]$中的所有点到询问点的距离 强制在线 询 ...
- 「FJOI2016」神秘数 解题报告
「FJOI2016」神秘数 这题不sb,我挺sb的... 我连不带区间的都不会哇 考虑给你一个整数集,如何求这个神秘数 这有点像一个01背包,复杂度和值域有关.但是你发现01背包可以求出更多的东西,就 ...
- 「NOI2014」购票 解题报告
「NOI2014」购票 写完了后发现写的做法是假的...然后居然过了,然后就懒得管正解了. 发现需要维护凸包,动态加点,询问区间,强制在线 可以二进制分组搞,然后你发现在树上需要资瓷撤回,然后暴力撤回 ...
随机推荐
- Xcode 插件推荐
1. Alcatraz(建议安装,以下插件都可以在Alcatraz下载安装) 使用Alcatraz来下载管理Xcode插件, 2.下载安装注释插件VVDocumenter-Xcode. 3.使用代码对 ...
- 一行代码轻松修改 Text Field 和 Text View 的光标颜色 — By 昉
众所周知,Text Field 和 Text View 的光标颜色默认都是系统应用的那种蓝色,如图: 而在实际开发中为了让视觉效果更统一,我们可能会想把那光标的颜色设置成和界面色调一致的颜色.其实在 ...
- JWT+ASP.NET Core集成方案
JWT JSON Web Token 经过数字签名后,无法伪造,一个能够在各方之间安全的传输JSON对象的开放标准(RFC 7519) 参考前文 [翻译]Introduction to JSON We ...
- Nginx+Tomcat负载均衡、动静分离群集
Nginx+Tomcat负载均衡.动静分离群集 目录 Nginx+Tomcat负载均衡.动静分离群集 一.Tomcat 1. Tomcat简介 2. Tomcat重要目录 二.Nginx负载均衡原理 ...
- 对已有的docker容器增加新的端口映射
一般在运行容器时,我们都会通过参数 -p(使用大写的-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如 docker run -it -d --name [contain ...
- 帆软报表(finereport)单元格函数,OP参数
单元格模型:单元格数据和引用:数据类型.实际值与显示值.单元格支持的操作单元格样式:行高列宽.隐藏行列.自动换行.上下标.文字竖排.大文本字段分页时断开.标识说明.格式刷单元格Web属性:web显示. ...
- Lesson14——NumPy 字符串函数之 Par3:字符串信息函数
NumPy 教程目录 1 字符串信息函数 1.1 numpy.char.count char.count(a, sub, start=0, end=None) 返回一个数组,其中包含 [start, ...
- Session是什么?它与Cookie有什么区别?
你好,是我琉忆. 今天我们讲一讲Session与Cookie的区别 1.Session对象 上一节简单介绍了Cookie,接下来简单介绍Session.Session和Cookie都是会话管理技术的一 ...
- NPM保资源管理工具
一.简介 什么是NPM NPM全称Node Package Manager,是Node.js包管理工具,是全球最大的模块生态系统,里面所有的模块都是开源免费的:也是Node.js的包管理工具,相当于前 ...
- pytest(5)-断言
前言 断言是完整的测试用例中不可或缺的因素,用例只有加入断言,将实际结果与预期结果进行比对,才能判断它的通过与否. unittest 框架提供了其特有的断言方式,如:assertEqual.asser ...