Barrett reduction

Barrett reduction

一.主要思想

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

二.算法步骤

计算xmodn

1.预计算阶段

​ 1. 首先n为整数,且n≥3,n不是2的幂。02

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

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

2.约减阶段

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

​ 2.若t

三.算法正确性证明

由于 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由于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

你可能感兴趣的:(大数运算,算法)