線形合同法
暗号論的擬似乱数生成器ではなく、そのまま暗号に使用してはならない。
線形合同法一般の欠点に、多次元で規則的に分布するという性質がある。線形合同法による乱数列r0, r1, r2, r3, ... から(r0, r1), (r1, r2), (r2, r3), ... のように順番に割り当ててプロットすると、それが疎になるのはしょうがないのだが(例として、全部で10000個しかない点を、10000x10000 の矩形にプロットすることになるのだから、稠密にはなりえない)、一定の間隔の平面上に点が並んでしまうのが問題である。印象的にこれを表現したフレーズに Random numbers fall mainly in the planes. (乱数は、主に平面(プレイン)に落ちる)というものがあり、「スペインの雨は主に平野(プレイン)に降る」(The rain in Spain stays mainly in the plain.)のパロディである。科学技術シミュレーションで3次元の点の位置などを生成する場合に問題となる。
下位ビットのランダム性が低い。
状態を記憶するのに必要なメモリの他には、作業用のワーキングメモリをほとんど必要としない。実用的な擬似乱数アルゴリズムでは最少の部類に属する。
低機能なプロセッサにも効率よく実装できる。素朴には乗算と除算が必要そうに見えるが、(1)定数による乗算なのでシフトと加減算の組合せにできる (2)除算そのものが必要なのではなく剰余が得られれば良いので合同算術による式変形が可能であり、乗算も含めて変形することでより効率化できる (3)剰余算についても、よく使われる 2-1 の形をした値による剰余は特別な場合として効率化ができる、といった特徴のためである。
そのため、専用回路化すら容易である(ただし、適切なM系列をLFSRで実装したほうが、回路で計算するにはより効率が良い上に、乱数としての質も良い)。
問題点は多いが、どのような問題があるか、どうやって回避すればいいかが十分に研究されている(ただし、回避しなければならない使い方を回避していなかった事例を挙げて、悪い結果を生成系のせいにされていることがしばしば見られる)。
Stephen K. Park と Keith W. Miller が、彼らのサーベイ中で「最低基準」として示したもので、より良い選択肢が無いのならば、自作などせずにこれを使うべしというもの。
X n + 1 = ( 48 , 271 × X n ) mod ( 2 31 − 1 ) {\displaystyle X_{n+1}=\left(48,271\times X_{n}\right)\ {\bmod {\ }}(2^{31}-1)}
C言語による実装例が「comp.lang.c FAQ list · Question 13.15」の回答中にある。