在 Python 中使用 gmpy2 库生成随机数的 N 位数字

Generating random number of N-digits using gmpy2 library in Python

提问人:Ahmed Khan 提问时间:9/15/2021 最后编辑:abyssloverAhmed Khan 更新时间:9/17/2021 访问量:882

问:

我想在 Python 中使用库生成随机数的 N 位。我知道可以使用库来做到这一点,但使用是必需的。gmpy2randomgmpy2

mpz_random() 函数生成一个从 0 到 N-1 的随机数。我不确定如何使用这个库来获得长度为 N 的随机数,例如 N=100。

输入:N(位数)

输出:长度为 N 的随机整数

例子:

|  INPUT  |  OUTPUT |
| ------- | ------- |
|   N=1   |    8    |
|   N=2   |    80   |
|   N=4   |   3224  |

我目前的代码是:

import gmpy2
n = 100
rs = gmpy2.random_state(hash(gmpy2.random_state()))
p = gmpy2.mpz_random(rs, n)
print(p)
python 随机 gmpy

评论

0赞 President James K. Polk 9/16/2021
我不明白你所说的随机数 N 位是什么意思。也许你可以用几个例子来澄清这一点。
0赞 Ahmed Khan 9/16/2021
@PresidentJamesK.Polk 当然,例如123456是 6 位数字,12345678是 8 位数字。我必须生成随机数量的指定数字。

答:

1赞 abysslover 9/16/2021 #1

您应该指定给定 N 的随机数的最小和最大数量,如下所示:

法典:

# conda install -c conda-forge gmpy2

def get_ranged_random_integer(rand_min, rand_max):
    import gmpy2
    rs = gmpy2.random_state(hash(gmpy2.random_state()))
    return rand_min + gmpy2.mpz_random(rs, rand_max - rand_min + 1)

def get_random_intger_of_N_digits(n):
    rand_min = 10**(n-1)
    rand_max = (10**n)-1
    return get_ranged_random_integer(rand_min, rand_max)

if __name__ == '__main__':
    n = 100
    p = get_random_intger_of_N_digits(n)
    print(f"[main] length: {len(str(p))}, random: {p}")

结果:

[main] length: 100, random: 2822384188052405746651605684545963323038180536388629939634656717599213762102793104021248192535427134