两分钟学会线性同余法产生伪随机数

线性同余法是一个经典的伪随机数发生器,算法如下:
a)将X(0)作为随机数的种子seed;
b)根据递推公式X(n+1) = (a*X(n)+b) % M,依次产生一个随机数序列X(1),X(2),…

其中,M的作用是产生0到M-1之间的伪随机数,因此M的大小直接影响伪随机数序列的周期长短,故M尽可能取比较大的值;
a和b的值越大,产生的伪随机数也越均匀
如果a和M如果互质,产生随机数效果更好。
例如:a.b可定义为int型;
数组X可定义为int型,但要防止a,b取值太大,造成X[i]溢出;
M可取随机数的最大值RAND_MAX(0x7FF);
种子X(0)可依次取1,2,3,…,或取当前时间作为种子,测试你生成的随机数;

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int n,i,j,A,b,m,s;
	scanf("%d %d %d %d %d",&n,&s,&A,&b,&m);
	int *a=(int*)malloc(sizeof(int)*(n+1));
	a[0]=s;
    for(i=0;i<n;i++)
    {
    	a[i+1]=(a[i]*A+b)%m;
    	printf("%d ",a[i+1]);
	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值