在计算机仿真中,我们通常需要使用计算机生成随机数,这篇文章就介绍一种简单的随机数生成方法,由于生成的随机数并不符合真正随机数的统计特性,所以我们称它伪随机数。
线性同余法
我们需要四个整数:模数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;
}
最后得到如下结果