zoukankan      html  css  js  c++  java
  • 线性同余法

    线性同余方法是产生随机数的方法:

    Xn+1=(a*Xn+c)mod(m)

    在计算机程序设计艺术中有下面的定理:

    由m,a,c和X0所定义的线性同余序列有周期长度m当且仅当:

    1:c与m互素;

    2:对于整除m的每个素数p,b=a-1是p的倍数

    3:如果m是4的整数,则b也是4的倍数。

    下面是实验

    #include<stdio.h>
    int rand(unsigned int seed)  
    {  
       return (unsigned int)(seed * 11 + 3) % 10;  
    // return (unsigned int)(seed * 1103515245 + 12345) % 32768;
    }  



    int main()  
    {  
         int x=1,i=0;  

         for(i;i<100;i++)  
         {  
            x = rand(x);  
            printf("%d,",x);     
         }  
           
         return 0;  
    }

    选取a=11,c=3,m=10满足条件。

    产生的序列为:4,7,0,3,6,9,2,5,8,1,4,7,0,3,6,9,2,5,8,1,4,7,0,3,6,9,2,5,8,1,4,7,0,3,6...

    周期正好为10。

  • 相关阅读:
    Root of AVL Tree
    04-树4 是否同一棵二叉搜索树
    03-树3 Tree Traversals Again
    03-树2 List Leaves
    283. Move Zeroes
    506. Relative Ranks
    492. Construct the Rectangle
    476. Number Complement
    461. Hamming Distance
    389. Find the Difference
  • 原文地址:https://www.cnblogs.com/macula7/p/1960478.html
Copyright © 2011-2022 走看看