找回密码
马上加入

QQ登录

只需一步,快速开始

搜索
发新帖

0

收听

2

听众

108

主题
发表于 2024-7-5 17:12:41 | 查看: 117| 回复: 0

线性同余生成器(Linear Congruential Generator, LCG)是一种简单且常用的伪随机数生成算法。它通过以下递归公式生成一系列伪随机数:

[ X_{n+1} = (a \cdot X_n + c) \mod m ]

其中:

  • ( X ) 是生成的伪随机数序列。
  • ( a ) 是乘数。
  • ( c ) 是增量。
  • ( m ) 是模数。
  • ( X_0 ) 是种子(初始值)。

下面是一个用 Lua 实现的线性同余生成器示例:

-- 定义线性同余生成器类
LCG = {}
LCG.__index = LCG

function LCG:new(seed, a, c, m)
    local lcg = {
        seed = seed,
        a = a,
        c = c,
        m = m,
        current = seed
    }
    setmetatable(lcg, LCG)
    return lcg
end

function LCG:next()
    self.current = (self.a * self.current + self.c) % self.m
    return self.current
end

-- 测试线性同余生成器
local seed = 12345
local a = 1103515245
local c = 12345
local m = 2^31

local lcg = LCG:new(seed, a, c, m)

print("生成的伪随机数序列:")
for i = 1, 10 do
    print(lcg:next())
end

解释

  1. LCG类:定义了线性同余生成器类,包含种子、乘数、增量、模数和当前值。

    • new 方法:创建一个新的线性同余生成器实例,接受种子、乘数、增量和模数作为参数。
    • next 方法:生成下一个伪随机数,并更新当前值。
  2. 测试代码:定义了种子、乘数、增量和模数,创建一个线性同余生成器实例,并生成一系列伪随机数。

输出

运行上述代码将输出一系列伪随机数,例如:

生成的伪随机数序列:
1406932606
654583775
1449466924
229283573
1109335178
1051550459
1293799192
794471793
551188310
803550167

这个简单的线性同余生成器可以根据实际需求进行调整,例如选择不同的参数 ( a )、( c ) 和 ( m ) 以生成不同的伪随机数序列。通过合理的参数选择,可以生成质量较高的伪随机数,适用于各种需要随机数的场景。

您需要登录后才可以回帖 登录 | 马上加入

QQ|Archiver|手机版|小黑屋|alg阿灵戈社区 ( 苏ICP备2023026137号-1|苏ICP备2023026137号-1 )

GMT+8, 2025-3-13 03:33 , Processed in 0.481108 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表