來自百科上的介紹:
線性同余方法(LCG)是個產生偽隨機數的方法。
它是根據遞歸公式:
其中
是產生器設定的常數。
LCG的周期最大為
,但大部分情況都會少於M。要令LCG達到最大周期,應符合以下條件:
線性同余算法有m 、a 、c 和X0 4個參數,通過置Xn + 1 ≡aXn + c (mod m) ,求得隨機數序列< Xn > , 這個序列稱作線性同余序列。m、a 、c 和X0 分別稱做模數、乘數、增量和初始值。線性同余方法速度快,如果對乘數和模數進行適當的選擇,可以滿足用於評價一個隨機數產生器的3 種准則:
1.這個函數應該是一個完整周期的產生函數。也就是說,這個函數應該在重復之前產生出0 到m之間的所有數;
2.產生的序列應該看起來是隨機的;
3.這個函數應該用32bit 算術高效實現。
在我的實現中,X0(或者叫N0)用系統提供的時間,A選16087,B選取0,M選取2147483647,即1<<31-1
源代碼:
1 public class Test2 { 2 public static void random(int num) { 3 long send = System.currentTimeMillis(); 4 for(int i = 1;i<=num;++i) { 5 send = (send*16807+0)%((1<<31) - 1); 6 System.out.print(send+" "); 7 if(i % 10 == 0)System.out.println(); 8 } 9 } 10 public static void main(String[]args) { 11 Test2.random(1000); 12 } 13 }
驗證截圖:

(直接截取了一部分)



;
都比
是正整數。