无法理解线性同余生成器的代码

Unable to understand the code for linear congruential generator

我正在制作另一个 python 脚本来执行线性同余生成器以生成 55 伪随机数,但无法理解线性同余生成器的算法以及我的脚本如何工作,即使脚本很简单我来写。

基于python脚本,为什么每次循环的输出都在变化? python 脚本是否适用于线性同余生成器?

#!/usr/bin/python3
# Fix variable for the seed, modulus, a and c 
seed = 8 
a = 2
c = 2 
m = 20

# counter for how many iterations we've run
counter = 0
#Perfom number of iterations requested by user
while counter < 50:
    # Store value of each iteration
    seed = (a * seed + c) % m
    counter = counter + 1

由于更新了种子变量,每次迭代的输出都会发生变化,您可以使用上一次迭代的种子来更改下一次迭代的种子。

seed = (a * seed + c) % m

在第一次迭代中你的种子是 5,所以

(3 * 5 + 3) % 19

给出 18。在第二次迭代中

(3 * 18 + 3) % 19

给出 0,因为 3*18 + 3 是 57,而 57 的模数 m 即 19 是 0。因此循环继续,每个前一个种子影响下一个。