TAOCP 3.2.1.1 Exercise 1
Let $w$ denote the machine word size of MIX.
Section 3.2.1.1: Choice of Modulus
Exercise 1. [**] $[M7]$ In exercise 3.2.1–3 we concluded that the best congruential generators will have the multiplier $a$ relatively prime to $m$. Show that when $m = w$ in this case it is possible to compute $(aX + c) \bmod w$ in just three MIX instructions, rather than the four in (1), with the result appearing in register X.
Verified: yes
Solve time: 2m41s
Solution
Let $w$ denote the machine word size of MIX. Since $m=w$, the recurrence is
$$ X_{n+1}=(aX_n+c)\bmod w. $$
Assume that $a$ and $c$ are stored in memory locations $A$ and $C$, respectively, and that the current value $X_n$ is in register $X$.
Because $(A:X)$ is the double-length register formed from $A$ and $X$, the instruction
MUL A
multiplies the contents of register $A$ by the contents of memory location $A$, placing the product in $(A:X)$. To use this instruction, first load the current state $X_n$ into register $A$. Then
$$ aX_n=q,w+r, \qquad 0\le r<w. $$
After the multiplication, the high-order part $q$ is in register $A$, and the low-order part $r=(aX_n)\bmod w$ is in register $X$.
Since $\gcd(a,w)=1$, $a$ is odd. Therefore the sign bit of $aX_n$ is determined entirely by the low-order word $r$. Hence register $X$ already contains the correct residue modulo $w$, and the high-order word may be ignored.
A three-instruction program is therefore
ENTA X
MUL A
INCX C
where:
ENTA Xcopies the current state $X_n$ from register $X$ into register $A$.MUL Amultiplies $X_n$ by the multiplier $a$, leaving $(aX_n)\bmod w$ in register $X$.INCX Cadds the increment $c$ to register $X$; arithmetic in a single MIX register is performed modulo $w$, so the result becomes
$$ \bigl((aX_n)\bmod w+c\bigr)\bmod w =(aX_n+c)\bmod w. $$
Thus $(aX+c)\bmod w$ is obtained in register $X$ using exactly three MIX instructions. ∎