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不是整数。n4k−1<r<n4k两侧同乘x(x≥0),同除4knx−4kx≤4kxr≤nx因为x<n2<4k,所以4kx<1因此nx−1<4kxr≤nx又因nx−2<⌊nx−1⌋⌊nx−1⌋≤⌊4kxr⌋因此nx−2<⌊nx−1⌋≤⌊4kxr⌋≤nx乘n取负数得−x≤−⌊4kxr⌋n<2n−x两侧加x0≤x−⌊4kxr⌋n<2n显然x≡x−⌊4kxr⌋modn