不超过 $10^{18}$ 的非负整数在模意义下的乘法

约定:在博主的校内 OJ 上, long double  类型支持阶码 $15$ 位、有效值 $63$ 位(即科学记数法保留 $64$ 位有效数字)。以下讨论以此为前提。

设非负整数 $a, b, p$ 满足 $a, b<p<2^{63},\ p \ne 0,$ 求 $ab \bmod p.$

$$ab \bmod p=ab-p\left\lfloor {ab \over p} \right\rfloor$$

我们知道 $\left\lfloor {ab \over p} \right\rfloor \leqslant {ab \over p} < p,$ 因此 $\left\lfloor {ab \over p} \right\rfloor$ 可以使用 $64$ 位无符号整数 unsigned long long 存储。

在计算过程中,我们可能会产生上溢出,且 unsigned long long 上溢出的结果是对 $2^{64}$ 取模,这会导致我们无法还原 $\left\lfloor {ab \over p} \right\rfloor.$

但是,注意到浮点数的精度溢出会在二进制下舍入,规则与“四舍六入五成双”类似,如果多余的尾数最高位为 $0,$ 就舍去;如果多余的尾数有且仅有最高位为 $1,$ 就向使结果末尾为 $0$ 的方向舍入;否则就进位。

我们考虑使用 long double 来计算 ${ab \over p},$ 然后转化为 unsigned long long,通过向 $0$ 取整规则得到 $\left\lfloor {ab \over p} \right\rfloor.$

通过分析,我们得到用 long double 计算 $\left\lfloor {ab \over p} \right\rfloor$ 的误差不超过 $\pm1.$

最后我们在模 $2^{64}$ 意义下计算 $ab-p\left\lfloor {ab \over p} \right\rfloor$ 得到 $ab \bmod p.$

于是代码就是这么写的:

1 typedef unsigned long long QWORD;
2 QWORD multi(QWORD x, QWORD y, QWORD mod)
3 {
4     return (x*y-(QWORD)((long double)x*y/mod)*mod+mod)%mod;
5 }

我们来理论验证一下以上细节:

  • 由于 $2^{-64}<{1 \over p} \leqslant {ab \over p}<p<2^{64}$ 并且 $2^e \leqslant {ab \over p} < 2^{e+1},$ 阶码 $e$ 的范围只有 $[-64, 64)$,完全足够使用。
  • 引理 $1.$ 如果 $1 \leqslant p, q<2^{64},$ 那么计算 $\left\lfloor q \over p \right\rfloor$ 没有误差。
    • 产生误差的唯一原因是 $q \over p$ 能够表示为 $2^e(1.\underset{k}{\underbrace{111\cdots1}}0\cdots)_{(2)}\ (k \geqslant 64),$ 即 $2^ep\left( 2^{k+2}-2 \right) \leqslant 2^{k+1}q < 2^ep\left( 2^{k+2}-1 \right).$
    • 当 $e \geqslant 0$ 时,因为 $2^{e+1}p, q$ 是整数,要想 $p\left( 2^{e+1}-2^{e-k} \right) \leqslant q < p\left( 2^{e+1}-2^{e-k-1} \right),$ 必然 $2^{e-k}p \geqslant 1.$ $q \geqslant p\left( 2^{e+1}-2^{e-k} \right)>2^ep \geqslant 2^k \geqslant 2^{64},$ 矛盾。
    • 当 $e<0$ 时,因为 $4p, 2^{-e}q$ 是整数,要想 $p\left(4-2^{-k}\right) \leqslant 2^{-e}q < p\left(4-2^{-1-k}\right),$ 必然 $2^{-k}p \geqslant 1.\ p \geqslant 2^k \geqslant 2^{64},$ 矛盾。
    • 综上,整数下取整除法没有误差。
  • 当 $ab<2^{64}$ 时,计算 $ab$ 没有误差,根据上述引理,计算 $\left\lfloor {ab \over p} \right\rfloor$ 也没有误差。
  • 当 $ab \geqslant 2^{64}$ 时,计算 $ab$ 的误差可以这么估计:$2^ex-2^{e-1} \leqslant ab \leqslant 2^ex+2^{e-1},$ 其中 $2^ex$ 是舍入结果,$2^{63} \leqslant x<2^{64}.$ 所以 $\left(2^{63}-1\right)p>p^2>ab \geqslant \left(2x-1\right)2^{e-1} \geqslant \left(2^{64}-1\right)2^{e-1}>\left(2^{63}-1\right)2^e,$ 因此 $\left\lvert 2^ex-ab \right\rvert < p.$ 根据引理 $1,$ 由于 $2^ex$ 和 $x$ 只有阶码上的差别,$\large \left\lfloor {2^ex \over p} \right\rfloor$ 同样没有误差。由此,所有误差产生于 $\large\frac{ab}p$ 和 $\large\frac{2^ex}p$ 之间的差异,这不超过 $\pm 1.$
  • 博主正在思考还有哪些情况没有误差,如果大家知道烦请告诉我;也可以给出导致误差的反例。
  • 博主的数学很菜,恳求大家检查并指出上述证明中的错误。

原文地址:https://www.cnblogs.com/nealchen/p/10346414.html

时间: 2024-08-20 19:18:01

不超过 $10^{18}$ 的非负整数在模意义下的乘法的相关文章

模意义下的组合数

模意义下的组合数 求\(C_{n}^{k}\%p\)(p为质数) \[C_{n}^{k}=\frac{n!}{k!(n-k)!}\] 设\(n!=a_1p^{e_1}, k!=a_2p^{e_2}, (n-k)!=a_3p^{e_3}\) 如果\(e_1-(e_2+e_3)>0\),则\(C_{n}^{k}\%p=0\) 否则\(C_{n}^{k}\%p=\frac{a_1}{a_2a_3}\%p=a_1(a_2a_3)^{(p-2)}\%p\)(费马小定理) LL mod_fact(LL n,

浅谈模质数意义下的乘法逆元

原文链接(更好的阅读体验) 参考文章www.luogu.org/blog/zyxxs/post-xiao-yi-jiang-tan-qian-tan-sheng-fa-ni-yuan 什么是乘法逆元 若整数\(b,m\)互质,并且\(b|a\),若存在一个整数\(x\),使得\(a / b \equiv a \ast x (mod \text{ } m)\),称\(x\)为 \(b\)的模\(m\)乘法逆元. 乘法逆元的用处 有时候,我们需要求\(a/b \text{ } mod \text{

hdu 6088 Rikka with Rock-paper-scissors (2017 多校第五场 1004) 【组合数学 + 数论 + 模意义下的FFT】

题目链接 首先利用组合数学知识,枚举两人的总胜场数容易得到 这还不是卷积的形式,直接搞的话复杂度大概是O(n^2)的,肯定会TLE.但似乎和卷积有点像?想半天没想出来..多谢Q巨提醒,才知道可以用下面这个公式进行转化 最后,化得的公式为 另外注意,上式右边是一个卷积的形式,但是,所得和的第一项是不需要加上的(不过图中公式没有体现).结合实际意义大概就是,i==0&&j==0时,gcd(i,j)不存在约数d,虽然0可以被任意正整数整除 & 第一项不为0 #include<bit

幂方程(模意义下)

问题 求解 $$x^a\equiv b(mod \ p)$$ 其中 $p$ 为质数 分析 由于 $p$ 为质数,肯定存在原根 $g$. 由原根的定义知 $x$ 可表示成 $x=g^c$,问题转化为 $(g^c)^a \equiv b(mod \ p)$,得到 $$(g^a)^c \equiv b(mod \ p)$$ 于是就转换成我们熟悉的BSGS模型了,可以在 $O(\sqrt p logp)$ 解出 $c$. 这样得到原方程的一个特解 $x_0 \equiv g^c(mod \ p)$.显然

楼市黄金10年发展历程 最严调控下房价涨跌潮

楼市黄金10年发展历程 最严调控下房价涨跌潮 行业动态新京报[微博]袁晓澜 张旭 自曾晖2014-11-13 07:35 我要分享 69 [摘要]自1998年终止福利分房后,中国内地进入一个住宅飞速私有化的时代.至此一骑绝尘. 2003年9月,北京秋季房展举行,这是北京有史以来最大规模的房展.图/CFP 从2003年开始,房地产发展过热引起争论,首先央行出台“121号文”严控房地产贷款和高档住宅建设,这是中国第一轮房地产牛市启动之后,中央政府第一次采取抑制房地产过热的措施.正当开发商遭遇当头一棒

GAMIT 10.50在Ubuntu 12.04系统下的安装

转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0225/162.html?1456480908 摘要:GAMIT/GLOBK是一套安装于Unix/Linux操作系统高精度GPS数据处理分析软件,以Ubuntu12.04桌面版构建系统平台,在网络的支持下,安装最新版GAMIT/GLOBK10.50的详细过程,并运行GAMIT检验安装是否成功. GAMIT/GLOBK是由美国麻省理工学院.斯克里普斯海洋研究所.哈佛大学共同研发的高精度GPS数据处理

Java基础知识强化之IO流笔记10:File类输出指定目录下指定后缀名的文件名称案例

1. 案例: 判断F盘下是否有后缀名为.jpg的文件,如果有的话,就输出这个文件名. 2. 案例代码如下: (1)思路是:先获取所有的文件和文件夹封装的对象,然后遍历的时候,依次判断,如果满足条件就输出. 1 package com.himi.filesdemo; 2 3 import java.io.File; 4 5 6 /** 7 * 判断F盘下是否有后缀名为.jpg的文件,如果有的话,就输出这个文件名 8 * @author hebao 9 * 10 */ 11 public class

python学习- 打印最常用的10条linux命令和查找目录下重复的文件

一.打印最常用的10条linux命令 #!/usr/bin/python #coding=utf-8 import os from collections import Counter c = Counter() with open(os.path.expanduser('~/.bash_history')) as f: for line in f: cmd = line.strip().split() if cmd: c[cmd[0]]+=1 print c.most_common(10) 效

10分钟教你阿里云环境下搭建iredmail邮件服务器

一.ireaqdmail 介绍 RedMail 是一个基于 Linux/BSD 系统的零成本.功能完备.成熟的邮件服务器解决方案. iRedMail 是一个开源.免费的项目.以 GPL(v2)协议发布. 二.使用的核心组件及其对应的功能 Postfix: SMTP 服务器 Dovecot: POP3/IMAP/Managesieve 服务器 Apache: Web 服务器 MySQL: 用于存储其它程序的数据,也可用于存储邮件帐号. OpenLDAP: 用于存储邮件帐号. Policyd: Po