在 Python 中使用 gmpy2 库生成 N 位随机数
Generating random number of N-digits using gmpy2 library in Python
我想使用 Python 中的 gmpy2
库生成一个随机数的 N 位数字。我知道可以使用 random
库来执行此操作,但必须使用 gmpy2
。
mpz_random()函数生成一个从0到N-1的随机数。我不确定如何使用此库来获取长度为 N 的随机数,例如 N=100。
INPUT:N(位数)
OUTPUT: 一个长度为 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)
您应该指定给定 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
我想使用 Python 中的 gmpy2
库生成一个随机数的 N 位数字。我知道可以使用 random
库来执行此操作,但必须使用 gmpy2
。
mpz_random()函数生成一个从0到N-1的随机数。我不确定如何使用此库来获取长度为 N 的随机数,例如 N=100。
INPUT:N(位数)
OUTPUT: 一个长度为 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)
您应该指定给定 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