首页 > 解决方案 > 无法理解线性同余生成器的代码

问题描述

我正在制作另一个 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

标签: pythonpython-3.xcryptographypseudocodelcg

解决方案


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

seed = (a * seed + c) % m

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

(3 * 5 + 3) % 19

给出 18. 在第二次迭代中

(3 * 18 + 3) % 19

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


推荐阅读