精华内容
下载资源
问答
  • 线性同余法

    2014-10-28 13:25:26
    线性同余方法是目前应用广泛的伪随机数生成算法,其基本思想是通过对前一个数进行线性运算并取模从而得到下一个数。...线性同余法的最大周期是m,但一般情况下会小于m。要使周期达到最大,应该满足以下条件

      线性同余方法是目前应用广泛的伪随机数生成算法,其基本思想是通过对前一个数进行线性运算并取模从而得到下一个数。即:
    a(i+1)=(a(i)*b+c)mod(m)
    其中b称为乘数,c称为增量,m称为模数,它们均为常数。
     
    乘数、增量和模数的选取可以多种多样,只要保证产生的随机数有较好的均匀性和随机性即可。
    线性同余法的最大周期是m,但一般情况下会小于m。要使周期达到最大,应该满足以下条件:
    (1) c和m互质;
    (2) m的所有质因子的积能整除b-1;
    (3) 若m是4的倍数,则b-1也是;
    (4) b,c,a(0)(初值,一般即种子)都比m小;
    (5) b,c是正整数。
    展开全文
  • 易语言线性同余法源码,线性同余法,取随机数_,置随机数种子_
  • 利用线性同余法求随机数,也可称作利用线性同余法求伪随机序列. 线性同余法是一种求随机数的方法,它所求得得随机数的序列是成周期性,同时它是根据公式计算求得得随机数并非是由硬件产生的随机数所以被称作伪随机序列...

    利用线性同余法求随机数,也可称作利用线性同余法求伪随机序列.

    线性同余法是一种求随机数的方法,它所求得得随机数的序列是成周期性,同时它是根据公式计算求得得随机数并非是由硬件产生的随机数所以被称作伪随机序列.随机序列的循环周期的大小取决于相关参数的选取,如果选取参数得当,可以将此循环周期拉得很长.

    以下算法是输入相关参数后,计算并产生随机数,然后输出循环周期的长度.

    线性同余法公式:

    a,b,m是随机数产生器设定的常数.

    mod:表示对m取余,即%m.

    x(0)被称为种子,x(n)与x(n-1)是随着运算进行是变化的
    关于a,b,m的取值,决定着随机序列周期的长短,满足以下条件后,可以让序列周期长度达到m,各个随机数不重合,且这些随机数序列包含了0到m的所有数.
    1. b和m互质,即公约数只有1
    2. M的所有质因子的积能够整除a-1,如若m是3的倍数,a-1也是3的倍数
    3. a,b,x0 都要比M小
    4. a,b是正整数
    例如:a=6 x0=4 b=7 m=25
       a=5 x0=6 b=15 m=16

    注意:一般应用中为了保证随机数序列尽量不重复,一般选取计算时候的时钟作为种子来开始计算
     

    代码实现:

    输入参数:a,x0,b,m

    输出一个完整序列中的所有随机数,并输出此随机数序列的长度.

    如:输入:

    a=5
    x0=6
    b=15
    m=16

    输出:
    13 0 15 10 1 4 3 14 5 8 7 2 9 12 11 6 
    length of the sequence is 16


    代码:

    #include <stdio.h>
    int CalRandNum(int a,int x0,int b,int m)
    {
    	int xn;
    	xn = (a*x0 + b)%m;
    	return xn;
    }
    int main()
    {
    	int a,b,m,x0,xn,x1;
    	int i = 0;
    	printf("a=");
    	scanf("%d",&a);
    	printf("x0=");
    	scanf("%d",&x0);
    	printf("b=");
    	scanf("%d",&b);
    	printf("m=");
    	scanf("%d",&m);
    	x1 = CalRandNum(a, x0, b, m);
    	while(xn!=x1){
    		if(i==0){
    			xn = x1;
    		}
            printf("%d ",xn);
    		i++;
    		xn = CalRandNum(a, xn, b, m);
    	}
    	printf("\r\nlength of the sequence is %d\r\n",i);	
    	return 0;
    }
    

     

    展开全文
  • 1.1.伪随机数(线性同余法) 1.1.1.算法描述 我们使用线性同余法,来限定一些离散点在y=a*x+b上。 1.1.2.伪代码 random(n,m,seed,a,b) //根据现行同余法生成n个伪随机书的一个序列 //输入:一个正整数n...

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

    习题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

    展开全文
  • 线性同余法生成随机数

    千次阅读 2020-01-09 12:44:39
    线性同余法生成随机数 以当前时间作为随机种子,生成30个0-1的随机数 srand()函数产生一个以当前时间开始的随机种子.应该放在for等循环语句前面 不然要很长时间等待 #include <stdio.h> #include <...

    线性同余法生成随机数

    以当前时间作为随机种子,生成30个0-1的随机数
    srand()函数产生一个以当前时间开始的随机种子.应该放在for等循环语句前面 不然要很长时间等待

    #include <stdio.h>
    #include <iostream>
    #include <time.h>
    using namespace std;
    int main(int argc, char* argv[])
    {
     int  MAX = 2;
     srand((unsigned)time(NULL));//srand()函数产生一个以当前时间开始的随机种子.应该放在for等循环语句前面 不然要很长时间等待
     for (int i = 0; i < 30; i++)
     {
      cout << rand() % MAX << endl;//MAX为最大值,其随机域为0~MAX-1
     }
     return 0;
    }

    结果显示

    第一次显示

    在这里插入图片描述
    第二次运行
    在这里插入图片描述

    展开全文
  • 线性同余法取随机数

    千次阅读 2016-07-01 23:16:36
    线性同余法求伪随机数,Linear-Congruential: (a * x + c) % m, a > 0, m > 0, m % a 首先,说明一下取随机数一般会用rand函数,取time.h文件中的clock()作为种子,产生我们需要的随机数 #include #...
  • 随机数在概率算法中扮演着重要的作用,在现实的计算机系统无法产生真正的随机数,因此概率算法在实际中使用...线性同余法是经典的随机数产生算法,详细介绍请参照计算机算法设计与分析>>,王小东著. 本代码是用matlab开发的
  • 线性同余法 这里不做过多介绍,搜一下就知道 核心函数: xn+1=(a∗xn+b)%mx_{n+1}=(a*x_n+b) \% mxn+1​=(a∗xn​+b)%m xn+1x_{n+1}xn+1​就是我们下一个要算的随机数 x0x_0x0​是我们的种子数 Code // jave.lin ...
  • 线性同余法生成伪随机数 在计算机上可以用物理方法来产生随机数,但价格昂贵,不能重复,使用不便。另一种方法是用数学递推公式产生,这样产生的序列与真正的随机数序列不同,所以称为伪随机数或伪随机序列,只要...
  • 线性同余方法(LCG)是个产生伪随机数的方法。它是根据递归公式:其中是产生器设定的常数。LCG的周期最大为,但大部分情况都会少于M。要令LCG达到最大周期,应符合以下条件:的所有质因子的积能整除;若是4的倍数,也...
  • 随机数生成器与线性同余法产生随机数 1、随机数生成器与/dev/random: 随机数生成器,顾名思义就是能随机产生数字,不能根据已经产生的数预测下次所产生的数的“器”(器存在软件与硬件之分),真正的随机数生成器...
  • 生成伪随机数是用Java编程时的常见需求,本文简单讨论一下最常用的Random和ThreadLocalRandom这两个随机数类,顺便介绍线性同余法。 Random 话休絮烦,直接上源码。 private final AtomicLong seed; private ...
  • 线性同余法是一种使用很广泛的伪随机数生成器算法。然而,它并不能用于密码技术。 算法介绍如下: 假设我们要生成伪随机数列为R0、R1、R2...。首先,我们根据伪随机数的种子,用下列公式计算第一个伪随机数R0 R0=...
  • 线性同余法产生(0,1)均匀分布的随机数 原理 maltab代码 clear all close all clc a=16807; c=0; M=2^32; X(1)=10^4; N=4096; for n=1:N-1 X(n+1)=mod(a*X(n),M); end X=X/(M-1); figure(1) plot(X) ...
  • 生成伪随机数的算法–线性同余法

    万次阅读 2013-03-19 23:03:46
    现在的随机函数发生器大都采用的是线性同余法。   同余的概念是这样描述的: 设m是一个给定的正整数,如果两个整数a,b用m除,所得的余数相同,则称a,b对模m同余。 所谓线性同余法(又叫混合同余法),就是...
  • 线性同余法[纯理论]

    千次阅读 2009-10-10 15:25:00
    现在的随机函数发生器大都采用的是线性同余法。 同余的概念是这样描述的:设m是一个给定的正整数,如果两个整数a,b用m除,所得的余数相同,则称a,b对模m同余。所谓线性同余法(又叫混合同余法),就是这样的一个...
  • 线性同余法产生1000个随机数

    千次阅读 2017-10-13 21:54:00
    设计思路:根据同余法产生随机数线性同余算法有m 、a 、c 和X0 4个参数,通过置Xn ≡aXn + c (mod m) ,求得随机数序列< Xn > , 这个序列称作线性同余序列。m、a 、c 和X0 分别称做模数、乘数、增量和初始值。从...
  • PHP实现线性同余法

    2018-05-29 11:19:48
    &lt;?php function returnXianXinTongYu($count){ $a = 9; $b = 7; $m = 1 &lt;&lt; 31; $value = []; $value[0] =time(); //$value[0] =100; for ($i = 1; $i &... $i++) { ...
  • 原来做高斯白噪声时写的程序 是基于DSP6416的线性同余法生成随机数的头文件,在C5000和C6000中都可以轻松调用,已经在CCS上调试通过了 使用时调用即可 或者自己加以修改也行 很常用
  • 一般我们用到的随机算法都是伪随机算法,什么叫伪随机算法呢?伪随机算法意思是假如知道第一个随机种子和随机算法的话就可以推算出下一个随机数。通常我们程序里都是通过当前时间...线性同余法 古老的LCG(linear cong
  • HDU-1014 线性同余法

    2019-02-22 21:04:46
    Problem Description Computer simulations often require random numbers. One way to generate pseudo-random numbers is via a function of the form seed(x+1) = [seed(x) + STEP] % MOD where ‘%’ is the ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 478
精华内容 191
关键字:

线性同余法