在計算機仿真中,我們通常需要使用計算機生成隨機數,這篇文章就介紹一種簡單的隨機數生成方法,由於生成的隨機數並不符合真正隨機數的統計特性,所以我們稱它僞隨機數。
線性同餘法
我們需要四個整數:模數m,倍數a,增量c和種子x,並且他們滿足2<=a<m,0<=c<m,0<=x<m。生成隨機數的公式如下:
x(n+1)=(ax(n)+c) mod m
我們選定模m=9, 倍數a=7, 增量c=4和種子x=3,使用c語言進行模擬
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
//生成隨機數
int *getRandom(int m,int a, int c,int x){
int* b = (int*)malloc(sizeof(int)*MAXSIZE);
b[0] = x;
for(int i=1; i<MAXSIZE; i++){
b[i] = (a*b[i-1] + c) % m;
}
return b;
}
int main(){
int* m = (int*)malloc(sizeof(int)*MAXSIZE);
m = getRandom(9, 7, 4, 3);
for(int i=0; i<MAXSIZE; i++){
printf("%d\t", m[i]);
}
return 0;
}
最後得到如下結果