【離散數學】僞隨機數生成

在計算機仿真中,我們通常需要使用計算機生成隨機數,這篇文章就介紹一種簡單的隨機數生成方法,由於生成的隨機數並不符合真正隨機數的統計特性,所以我們稱它僞隨機數。

線性同餘法

我們需要四個整數:模數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;
}

最後得到如下結果
程序運行結果

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