バレットの還元アルゴリズム
バレットが最初に考案したのは、上記のアルゴリズムの整数版であり、特に値がマシンのワードに収まる場合に適用できる。
上記の方法で a mod n {\displaystyle a\,{\bmod {\,}}n} を整数の範囲内で計算する場合、自明に対応するのは n {\displaystyle n} による除算を用いる方法である。
しかし、除算の計算には時間がかかり、CPUによっては定数時間で完了しない命令が使用されうる。そこで、バレットの方法では 2 k {\displaystyle 2^{k}} による除算なら低コストな右シフトとして実現できることに注目し、 1 / n {\displaystyle 1/n} を m / 2 k {\displaystyle m/2^{k}} で近似する。
2 k {\displaystyle 2^{k}} が与えられたとき、最良の m {\displaystyle m} を見つけるために以下の式を考える。
m 2 k = 1 n ⟺ m = 2 k n {\displaystyle {\frac {m}{2^{k}}}={\frac {1}{n}}\;\Longleftrightarrow \;m={\frac {2^{k}}{n}}}