线性同余法的伪随机数

学校练习,简单的我就不放上来了,值得整理的,我保存一下

习题9

1.1. 伪随机数(线性同余法)

 

1.1.1.算法描述

我们使用线性同余法,来限定一些离散点在y=a*x+b上。

1.1.2.伪代码

 

random(n,m,seed,a,b)

//根据现行同余法生成n个伪随机书的一个序列

//输入:一个正整数n和正整数参数m,seed,a,b

//输出:随机数组

r0<-seed

for i<-1 to n do

ri<-(a*ri-1+b) mod m

end

1.1.3.算法实现

public static long[] random(int n,int m,long seed,int a,int b){
    long[] val=new long[n];
    val[0]=seed%m;
    for(int i=1;i<n;i++) val[i]=(a*val[i-1]+b)%m;
    return val;
}

1.2. 算法小结

使用线性同于法,复杂度a[n],能实现比较类随机的伪随机。

原文地址:https://www.cnblogs.com/littlepage/p/11515534.html

时间: 2024-10-11 11:23:59

线性同余法的伪随机数的相关文章

使用线性同余法生成伪随机数/序列(C++实现)2

以下是网上关于随机数生成的一类说法: 在计算机上可以用物理方法来产生随机数,但价格昂贵,不能重复,使用不便.另一种方法是用数学递推公式产生,这样产生的序列与真正的随机数序列不同,所以称为伪随机数或伪随机序列,只要方法和参数选择合适,所产生的伪随机数就能满足均匀性和独立性,与真正的随机数具有相近的性质. 以下是一个使用了线性同余的递推公式: Xt = (X0 * 17 + 29) mod 500 线性同余中的线性,是指"线性"表示方程中 x 的次数是一次,mod 取余运算符则体现了&qu

使用线性同余法生成伪随机数/序列(C++实现)

最近朋友提出一个问题,自己编写函数生成随机数,一开始没有认真思考,后来想了一下,如果是学习过计算机密码学,应该很快就能设计出一些算法,这里使用了数论领域的相关知识--线性同余法简单实现了生成随机数算法. 以下是网上关于随机数生成的一类说法: 在计算机上可以用物理方法来产生随机数,但价格昂贵,不能重复,使用不便.另一种方法是用数学递推公式产生,这样产生的序列与真正的随机数序列不同,所以称为伪随机数或伪随机序列,只要方法和参数选择合适,所产生的伪随机数就能满足均匀性和独立性,与真正的随机数具有相近的

伪随机数算法--线性同余法

1 Static Function rand() 2 x = (x * 37 + 27) Mod 1000 3 rand = x 4 End Function VB代码 伪随机数算法--线性同余法

伪随机数(线性同余法)

/**Keil Lib*2015.6.12*Pass*by lort*/uint32 Srandx ; uint32 SrandK = 1103515245;//0x41C64E6D;uint32 SrandB = 12345;//0x3039; void os_srand(uint32 seek){    Srandx =seek;}uint32 os_rand (void){    Srandx = Srandx *SrandK +SrandB ;    return (Srandx>>1

伪随机数算法(一)

伪随机数概念在我大学一年级接触C语言基础的时候就听说过,并熟练掌握C语言中rand()函数的使用方法.不过,当时我对伪随机数的认识基本也就停留在百度百科那种小白水平,最多就知道老师说我们用的随机数是假的,是通过某种算法实现的.最近学习计算物理学讲到Monte Carlo方法时,通过课本和互联网才算真正意义上理解了什么是伪随机数.借此文好好总结一下吧! 一.随机数的分类 在计算物理学中,随机数被准确地分成了三类:真随机数.准随机数.伪随机数.那么这三种的区别是什么呢?拷贝一段书上的定义(我觉得写的

一、解密随机数生成器(2)——从java源码看线性同余算法(转)

上篇博客中,我们了解了基于物理现象的真随机数生成器,然而,真随机数产生速度较慢,为了实际计算需要,计算机中的随机数都是由程序算法,也就是某些公式函数生成的,只不过对于同一随机种子与函数,得到的随机数列是一定的,因此得到的随机数可预测且有周期,不能算是真正的随机数,因此称为伪随机数(Pseudo Random Number). 不过,别看到伪字就瞧不起,这里面也是有学问的,看似几个简简单单的公式可能是前辈们努力了几代的成果,相关的研究可以写好几本书了!顺便提一下,亚裔唯一图灵奖得主姚期智,研究的就

解密随机数生成器(二)——从java源码看线性同余算法

Random Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术的3.2.1节) 如果两个Random实例使用相同的种子,并且调用同样的函数,那么生成的sequence是相同的 也可以调用Math.random()生成随机数 Random实例是线程安全的,但是并发使用Random实例会影响效率,可以考虑使用ThreadLocalRandom变量. Random实

伪随机数算法

Random 转载内容,有更改,感谢原作者() Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术的3.2.1节) 如果两个Random实例使用相同的种子,并且调用同样的函数,那么生成的sequence是相同的 也可以调用Math.random()生成随机数 Random实例是线程安全的,但是并发使用Random实例会影响效率,可以考虑使用ThreadLocal

伪随机数安全性

真正的随机数是使用物理现象产生的:比如掷钱币.骰子.转轮.使用电子元件的噪音.核裂变等等.这样的随机数发生器叫做物理性随机数发生器,虽然很可靠,但是使用计算机很难实现,它们的缺点是技术要求比较高. 在实际应用中往往使用伪随机数就足够了.这些数列看似是随机的数,实际上它们是通过一个固定的.可以重复的计算方法产生的.计算机产生的随机数有很长的周 期性.它们不真正地随机,因为它们实际上是可以计算出来的,但是它们具有类似于随机数的统计特征.这样的发生器叫做伪随机数发生器. 伪随机数又有强弱之分.强伪随机