问题:固定模数 \(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) 逆元的更多相关文章

  1. 「 神器 」在线PDF文件管理工具和图片编辑神器

    每天进步一丢丢,连接梦与想 在线PDF文件管理工具 完全免费的PDF文件在线管理工具,其功能包括:合并PDF文件.拆分PDF文件.压缩PDF文件.Office文件转换为PDF文件.PDF文件转换为JP ...

  2. 一个「学渣」从零开始的Web前端自学之路

    从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的“丰富”. 最后的机缘巧合下,走上了前端开发之路,作为一个非计算机专业且低 ...

  3. 36氪首发 | 「myShape」完成千万级人民币 Pre-A轮融资,推出 AI 智能健身私教

    无需任何可穿戴设备. 36氪获悉,myShape(原Shapejoy)已于近期完成千万级人民币的Pre-A轮融资,由天奇阿米巴领投,远洋集团.七熹资本以及老股东跟投.过去 myShape 曾获得元迅资 ...

  4. 《Offer一箩筐》一份高质量「简历」撰写指南,望打扰!!

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」. 如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力! Hi~ 这里是 ...

  5. 「2014-2-26」Unicode vs. UTF-8 etc.

    目测是个老问题了.随便一搜,网上各种总结过.这里不辞啰嗦,尽量简洁的备忘一下. 几个链接,有道云笔记链接,都是知乎上几个问题的摘录:阮一峰的日志,1-5 还是值得参考,但是之后的部分则混淆了 Wind ...

  6. 「luogu4462」[CQOI2018] 异或序列

    「luogu4462」[CQOI2018]异或序列 一句话题意 输入 \(n\) 个数,给定\(k\),共 \(m\) 组询问,输出第 \(i\) 组询问 \(l_i\) \(r_i\) 中有多少个连 ...

  7. LOJ #2116 Luogu P3241「HNOI2015」开店

    好久没写数据结构了 来补一发 果然写的时候思路极其混乱.... LOJ #2116 Luogu P3241 题意 $ Q$次询问,求树上点的颜色在$ [L,R]$中的所有点到询问点的距离 强制在线 询 ...

  8. 「FJOI2016」神秘数 解题报告

    「FJOI2016」神秘数 这题不sb,我挺sb的... 我连不带区间的都不会哇 考虑给你一个整数集,如何求这个神秘数 这有点像一个01背包,复杂度和值域有关.但是你发现01背包可以求出更多的东西,就 ...

  9. 「NOI2014」购票 解题报告

    「NOI2014」购票 写完了后发现写的做法是假的...然后居然过了,然后就懒得管正解了. 发现需要维护凸包,动态加点,询问区间,强制在线 可以二进制分组搞,然后你发现在树上需要资瓷撤回,然后暴力撤回 ...

随机推荐

  1. 使用Reachability监测网络变化-陈鹏

    在appdelegate里面添加观察者,并启动监测 // 使用通知中心监听kReachabilityChangedNotification通知 [[NSNotificationCenter defau ...

  2. LVS+Keepalived 高可用群集部署

    LVS+Keepalived 高可用群集部署 1.LVS+Keepalived 高可用群集概述 2.LVS+Keepalived高可用群集部署 1.LVS+Keepalived 高可用群集概述: LV ...

  3. OSPF路由协议基础知识

    OSPF路由协议 1.OSPF的基本概念 2.OSPF邻接关系的建立 3.OSPF的应用环境 4.OSPF的基本配置命令 1.OSPF区域为了适应大型的网络,OSPF在AS(自治系统)内划分多个区域. ...

  4. 痞子衡嵌入式:揭秘i.MXRT1060,1010上串行NOR Flash冗余程序启动设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1060,1010上串行NOR Flash冗余程序启动设计. 工业产品设计里经常会有冗余程序/备份程序设计的需求,因为在工业 ...

  5. JIRA 测试循环的创建和使用

    3.测试循环 3.1测试循环的创建      测试人员编写完测试用例,并评审通过后:测试负责人可以计划测试循环. 点击JIRA 选择列表栏中的"测试".点击"计划循环测试 ...

  6. Express中使用session

    1.安装express-session npm install express-session --save-dev //注意-g无效 2.app.jsvar session = require('e ...

  7. Spring Boot-开启第一步

    Spring Boot开发的目的是为了简化Spring应用的开发,使用Spring Boot可以零配置开启一个Spring应用.这得益于Spring Boot中的自动配置组件,如果开发者觉得默认的配置 ...

  8. 大厂晋升指南:材料准备,PPT 写作和现场答辩

    大部分公司在年初,都是绩效回顾.晋升答辩的时期,对于阿里.美团等不少互联网企业,财年是从前一年的 4 月到第二年的 3 月底,春节回来以后,就是一年一度的述职晋升环节. 这里我结合自己述职以及辅导其他 ...

  9. Linux命令行模式下安装VMware Tools详细步骤

    在Linux命令行模式安装VMware Tools 方法/步骤1: 首先启动CentOS 7,在VMware中点击上方"VM",点击"Install VMware Too ...

  10. Gateway 简介

    概述 微服务可能分布在不同的主机上,这样有许多缺点:前端需要硬编码调用不同地址的微服务很麻烦:存在跨域访问的问题:微服务地址直接暴露是不安全的.还有所以需要为前端提供一个统一的访问入口.Gateway ...