大数取模运算Barrett reduction

本文介绍了Barrett约减算法,一种优化单模数多约减操作的方法,通过将除法转换为移位、乘法和加减,减少计算时间。算法步骤包括选择基b、k,预计算μ,构造q^,以及对z进行特定的减法处理。文章还涉及正确性的数学推导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Barrett reduction

约减概述

约减的定义(reduction):z(modp)z \pmod pz(modp)
优化约减的目的:取模操作的底层实现往往使用到的是除法,而除法操作往往是较为耗时的,因此需要把除法操作替换为不那么费时的其他操作

Barrett 约减概述

单模数多约减:多个约减操作,其模数ppp是固定的,而zzz不同。
针对单模数多约减的情况,可以使用Barrett约减来进行优化操作。
Barrett约减算法的整体流程可以概括如下:
step 1.根据p,选定b和k,其中b代表的是基,满足b≥3b \ge 3b3,k=⌊logbp⌋+1k = \lfloor log_b^p \rfloor+1k=logbp+1,0≤z0 \le z0z<b2k\lt b^{2k}<b2k
step 2.预计算 μ=⌊b2k/p⌋\mu = \lfloor b^{2k} /p \rfloorμ=b2k/p
step 3.构造q^\hat{q}q^,使得q−2≤q^≤qq-2 \le \hat{q} \le qq2q^q不等式1
step 4.优化计算r=z−q^∗pr=z-\hat{q}*pr=zq^p
step 5.在两步减法操作内,计算得到最终的r
在这里插入图片描述
算法2.14中,使用荧光笔标记了一些运算过程,其中绿色代表移位操作,粉色代表乘法操作,黄色代表加减操作,蓝色代表预处理操作。因此,整个过程,将除法转化为移位、乘法、加减等操作,从而实现了约减去的目的。
此外,对于r=z−q^∗pr=z-\hat{q}*pr=zq^p的计算,也存在优化的操作。记z=z1∗2k+1+z0z=z_1*2^{k+1}+z_0z=z12k+1+z0,q^∗p=u1∗2k+1+u0\hat{q}*p=u_1*2^{k+1}+u_0q^p=u12k+1+u0。根据推导可以得出0≤z−q^∗p<bk+10 \le z-\hat{q}*p \lt b^{k+1}0zq^p<bk+1不等式2),因此先计算z0−u0z_0-u_0z0u0(对应算法2.14的第3行),但当存在从z1z_1z1借位的时候,z0−u0<0z_0-u_0 \lt 0z0u0<0,因此此时需要再加上bk+1b^{k+1}bk+1(对应算法2.14的第4行)。

正确性证明

下面主要对于不等式1和不等式2进行数学推导与证明。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值