Barrett reduction

Barrett reduction

一.主要思想

​ 在计算modn操作时,需要用到除法。而计算机计算除法的速度很慢,因此Barrett reduction算法使用位移操作和减法操作来替换除法操作,实现modn的目的

二.算法步骤

计算xmodn

1.预计算阶段

​ 1. 首先n为整数,且n≥3,n不是2的幂。0<x<n2

​ 2. 选择一个自然数k,其中2k>n

​ 3. 计算r = ⌊4k / n⌋ (r是预计算因子)

2.约减阶段

​ 1.计算t = x - ⌊x*r / 4k⌋ * n

​ 2.若t<n,则xmodn = t ;若t≥n,则 xmodn = t - n

三.算法正确性证明

由于 n 不是 2 的幂,所以 4 k n 不是整数。 4 k n − 1 < r < 4 k n 两侧同乘 x ( x ≥ 0 ) , 同除 4 k x n − x 4 k ≤ x r 4 k ≤ x n 因为 x < n 2 < 4 k , 所以 x 4 k < 1 因此 x n − 1 < x r 4 k ≤ x n 又因 x n − 2 < ⌊ x n − 1 ⌋ ⌊ x n − 1 ⌋ ≤ ⌊ x r 4 k ⌋ 因此 x n − 2 < ⌊ x n − 1 ⌋ ≤ ⌊ x r 4 k ⌋ ≤ x n 乘 n 取负数得 − x ≤ − ⌊ x r 4 k ⌋ n < 2 n − x 两侧加 x 0 ≤ x − ⌊ x r 4 k ⌋ n < 2 n 显然 x ≡ x − ⌊ x r 4 k ⌋ m o d n \begin{align} &由于n不是2的幂,所以\frac{4^k}{n}不是整数。\\ \\ &\frac{4^k}{n}-1<r<\frac{4^k}{n}\\ \\ &两侧同乘x(x\ge0),同除4^k\\ \\ &\frac{x}{n}-\frac{x}{4^k}\le\frac{xr}{4^k}\le\frac{x}{n}\\ \\ &因为x<n^2<4^k,所以\frac{x}{4^k}<1\\ \\ &因此\frac{x}{n}-1<\frac{xr}{4^k}\le\frac{x}{n}\\ \\ &又因 \frac{x}{n}-2<\lfloor\frac{x}{n}-1\rfloor\\ \\ &\lfloor\frac{x}{n}-1\rfloor\le\lfloor\frac{xr}{4^k}\rfloor\\ \\ &因此\frac{x}{n}-2<\lfloor\frac{x}{n}-1\rfloor\le\lfloor\frac{xr}{4^k}\rfloor\le\frac{x}{n}\\ &乘n取负数得\\ &-x\le-\lfloor\frac{xr}{4^k}\rfloor n<2n-x\\ &两侧加x\\ &0\le x-\lfloor\frac{xr}{4^k}\rfloor n<2n\\ &显然x\equiv x-\lfloor\frac{xr}{4^k}\rfloor modn \end{align} 由于n不是2的幂,所以n4k不是整数。n4k1<r<n4k两侧同乘x(x0),同除4knx4kx4kxrnx因为x<n2<4k,所以4kx<1因此nx1<4kxrnx又因nx2<nx1nx14kxr因此nx2<nx14kxrnxn取负数得x4kxrn<2nx两侧加x0x4kxrn<2n显然xx4kxrmodn

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值