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

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

线性同余法

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

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

发布了130 篇原创文章 · 获赞 151 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/haohulala/article/details/104770062