CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

第2章 ストリーム API の使い方 : 問題 5 : iterate メソッドによる Stream の生成

問題 5

Stream.iterateを使って乱数の無限ストリームを生成せよ
このときMath.randomを呼び出すのではなく、線形合同生成機(Linear Congruential Generator)を直接実装すること

{ x_0 = seed }
{ x_{n+1} = (ax_n + c) \% m }
{ a = 25214903917 }
{ c = 11 }
{ m = 2^{48} }

解答

public static LongStream random(long seed) {
    final long a = 25214903917L;
    final long c = 11;
    final long m = 1L << 48;
    return LongStream.iterate(seed, x -> (a*x + c) % m);
}