在计算modn操作时,需要用到除法。而计算机计算除法的速度很慢,因此Barrett reduction算法使用位移操作和减法操作来替换除法操作,实现modn的目的
计算xmodn
1. 首先n为整数,且n≥3,n不是2的幂。0
2. 选择一个自然数k,其中2k>n
3. 计算r = ⌊4k / n⌋ (r是预计算因子)
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三.算法正确性证明