生成一个看似随机且没有重复的数组,其中每个索引都有越来越大的可能值范围

问题描述 投票:0回答:1

我一直在尝试使用:

p = 4241 #Any large prime
x = 10 #Any Number smaller than p
 for i in range (x):
    print(p* (i) % 100)

生成看似随机的数字列表。虽然我希望列表更加随机,但这仍然足以满足我的目的。对于我的实际问题,我正在尝试创建一个有 2 个输入的函数

generate_i_in_sequence(i, seed)

我将是前一个数组的索引,种子将是随机化结果的东西。重要的是,具有相同种子的两个 i 不会生成相同的输出。这很简单,另一部分是我可能的范围需要是 range(1,100+i) 例如。一个看似随机的数字,该数字的范围可能随着我的成长而增长。我也希望这个过程是可逆的。基本上是一个密码。

我期望能够通过使用模表达式的一些巧妙的“步骤”解决方案来解决问题。 i = no_of_steps,并且需要线性增加范围,因此:

PRIME* (i) % (x+(i))

但是,由于范围增加也会对序列产生不利影响,因此它不再生成具有唯一对应值的 i,所以我根本不确定这是否是解决问题的方法。

python encryption random
1个回答
0
投票

使用 Numpy 库创建您的数字,如下所示:

import numpy as np

def generate_i_in_sequence(i,seed):
    rng = np.random.default_rng(seed=seed+i)
    num = rng.integers(1, 100+i ,endpoint=True)
    return num

种子是一组seed+i,因此每个数字都是唯一的,确保函数生成的每个数字都是不同且可逆的,即使用户只需要记住一个种子。

此函数将返回一个看似随机生成的数字,然后您可以将其附加到列表末尾以创建解密列表

如果您需要更多信息,请随时询问,或在此处查看 Numpy 文档:https://numpy.org/doc/stable/reference/random/ generated/numpy.random.Generator.integers.html

© www.soinside.com 2019 - 2024. All rights reserved.