线性同余法随机数生成器
/** * 线性同余法. rand[n + 1] = (a * rand[n] + b) % length */ public class RandomNumber { private static final int a = 1664525; private static final int b = 1013904223; private static final int m = 0x7FFF_FFFF; private final int length; private int rand; public RandomNumber(int seed, int length) { this.rand = seed * (this.length = length); } private int rand() { return (this.rand = a * rand + b & m);// 先计算乘法, 再计算加法, 然后计算按位与 } public int next() { return rand() % length; } public int next0or1() { return next() < (length / 2) ? 0 : 1; } public List<Integer> getMany(int many) { return new ArrayList<Integer>(many) {{ for (int i = 0; i < many; i++) add(next()); }}; } public static void main(String[] args) { RandomNumber rr = new RandomNumber(333, 100); // 输出 10 个100以内的随机数. for (int i = 0; i < 10; i++) { System.out.println(rr.next()); } System.out.println("****************************"); // 输出10个0 或者 1. 相当于抛硬币. for (int i = 0; i < 10; i++) { System.out.println(rr.next0or1()); } } }
参考: https://www.cnblogs.com/xkfz007/archive/2012/03/27/2420154.html