B = 2 ** 20 p = mpz('13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084171') g = mpz('11717829880366207009516117596335367088558084999998952205599979459063929499736583746670572176471460312928594829675428279466566527115212748467589894601965568') h = mpz('3239475104050450443565264378728065788649097520952449527834792452971981976143292558073856937958553180532878928001494706097394108577585732452307673444020333')
hash_table = dict() for x_1 in range(B + 1): key = mul(h, invert(powmod(g, x_1, p), p)) % p value = x_1 hash_table[key] = value
base = powmod(g, B, p) for x_0 in range(B + 1): target = powmod(base, x_0, p) if target in hash_table: break
x = x_0 * B + hash_table[target] print('x: {}'.format(x))
近期评论