梅森旋转算法的伪随机数生成器,在1-33中得出6个不重复的随机数,
以下是使用梅森旋转算法的伪随机数生成器来得出6个不重复的1-33之间的随机数的Python代码:
import random
# 初始化梅森旋转算法的种子
def init_genrand(seed):
global MT, index
MT = [0] * 624
MT[0] = seed
for i in range(1, 624):
MT[i] = (1812433253 * (MT[i - 1] ^ (MT[i - 1] >> 30)) + i) & 0xffffffff
index = 624
# 生成下一个32位随机数
def genrand_int32():
global MT, index
if index >= 624:
for i in range(624):
y = (MT[i] & 0x80000000) + (MT[(i + 1) % 624] & 0x7fffffff)
MT[i] = MT[(i + 397) % 624] ^ (y >> 1)
if y % 2 != 0:
MT[i] = MT[i] ^ 0x9908b0df
index = 0
y = MT[index]
y = y ^ (y >> 11)
y = y ^ ((y << 7) & 0x9d2c5680)
y = y ^ ((y << 15) & 0xefc60000)
y = y ^ (y >> 18)
index += 1
return y & 0xffffffff
# 生成1-33之间的随机整数
def randint_1_33():
return genrand_int32() % 33 + 1
# 生成6个不重复的随机数
def generate_numbers():
numbers = set()
while len(numbers) < 6:
numbers.add(randint_1_33())
return sorted(numbers)
# 初始化种子并生成6个随机数
init_genrand(random.randint(0, 2**32-1))
numbers = generate_numbers()
# 输出结果
print(numbers)
这里使用了Python的set集合来保证生成的6个随机数不重复。你可以修改代码中的随机数范围和生成的数目来适应不同的需求。
原文地址: https://www.cveoy.top/t/topic/zdQ 著作权归作者所有。请勿转载和采集!