Search code examples
pythonrandomgmpy

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


I want to generate a random number of N-digits using gmpy2 library in Python. I know that it is possible to do this using random library, but using gmpy2 is a requirement.

mpz_random() function generates a random number from 0 to N-1. I am not sure how to use this library to get a random number of length N, e.g., N=100.

INPUT: N (the number of digits)

OUTPUT: A random integer of length N

EXAMPLES:

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

My current code is:

import gmpy2
n = 100
rs = gmpy2.random_state(hash(gmpy2.random_state()))
p = gmpy2.mpz_random(rs, n)
print(p)

Solution

  • You should specify the minimum, and maximum number of random numbers given N as follows:

    Code:

    # 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}")
    

    Result:

    [main] length: 100, random: 2822384188052405746651605684545963323038180536388629939634656717599213762102793104021248192535427134