【离散数学】伪随机数生成

在计算机仿真中,我们通常需要使用计算机生成随机数,这篇文章就介绍一种简单的随机数生成方法,由于生成的随机数并不符合真正随机数的统计特性,所以我们称它伪随机数。

线性同余法

我们需要四个整数:模数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;
}

最后得到如下结果
程序运行结果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章