The modulus 0 < M < 2WM occupies a register of WM-bits width:
←WM→ | |
M |
We will use ↜curly arrows↝ to refer to the widths of hypothetical zero and nonzero segments of registers, for the purpose of min/max width analysis of the intermediate results in our computation.
0 ≤ JM < WM is one less than the measure of M:
0 | M | |
↜JM↝ |
Lemma 1: For any integers A ≥ 0, B > 0, C = ⌊A / B⌋, Measure(C) ≤ Measure(A) - Measure(B) + 1.
Therefore, Measure of BM will be less than or equal to:
2WM - Measure(M) + 1 = 2WM - JM
0 < BM < 2KM | ||
←2WM→ | ||
0 | BM | |
↜JM↝ | ↜2WM - JM↝ |
0 ≤ X < 2KM is the integer to be reduced modulo M, and occupies a register of twice the bitness of the register containing M:
X | |
←2WM→ |
1: Xs = X >> JM
0 | XS | |
↜JM↝ | ↜2WM - JM↝ |
Lemma 2: For any integers A ≥ 0, B ≥ 0, C = A × B, Measure(C) ≤ Measure(A) + Measure(B).
2: Z := Xs × BM
0 | XS | ||||
× | 0 | BM | |||
←4WM→ | |||||
= | 0 | Z | |||
↜2JM↝ | ↜4WM - 2JM↝ |
3: Zs := Z >> 2WM - JM
←4WM→ | ||
0 | ZS | |
↜2WM - JM↝ |
←2WM→ | ||
0 | ZS | |
↜2WM - JM↝ |
4: Q := Zs × M
0 | ZS | ||||
× | 0 | M | |||
←3WM→ | |||||
= | 0 | Q | |||
←2WM→ |