线性同余发电机全周期测试

问题描述

编写一个程序,以证明具有模数的线性同余生成器 ?= 2 ?和常数?= 1,为了达到完整周期,乘数?必须为 等于4?+1。考虑?= 5、7和10; ?= 2和9。您还应该考虑 乘数的两个与此不匹配的值。

我的问题是我有在Python中运行此代码。我得到的建议是

def lcg(modulus,a,c,seed):
    """Linear congruential generator."""
    while True:
        seed = (a * seed + c) % modulus
        yield seed

但是,问题没有提到种子值,我也不知道如何判断它是否可以达到一个完整的时期。任何指导将不胜感激

解决方法

什么是种子?

变量seed表示RNG(随机数生成器)的状态。您必须具有某种可变状态,即使它是文件中的位置或真实的随机数,否则RNG每次调用都会返回相同的数字。

对于LCG,种子只是最新的值。您可以将其保存在驱动程序例程中,或另存为某种内部状态整数。通常是一个可选参数。您可以在首次调用“种子”时提供它,或开始序列。

如何判断我是否获得了完整序列?

由于LCG状态完全由最新值描述,因此它将返回一个恒定的值周期,并在您使用该周期时重复该周期。要对此进行测试,您可以简单地从0的种子开始(任何值都可以),然后计算再次获得该值需要进行多少次迭代。

您还可以根据LCG参数确定循环长度。这是该学生的研究项目(从Wikipedia开始)。

这能消除您的烦恼吗?

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...