import numpy # bit-size of p n = 512 # p determines the field p = next_prime(2^(n-1)) # number of MSBs k = ceil(sqrt(n)) + ceil(log(n, 2)) def msb(k, x): """ Randomised/non-randomised MSBs that returns k bits of x p is global. Do not use the randomised version for large p """ """ while True: z = ZZ.random_element(1, p-1) #randint(1, p-1) answer = abs(x - z) if answer < p / 2^(k+1): print(answer) break """ xbin = x.digits(2) n = len(xbin) z = sum([2^i*xbin[i] for i in range(n-k-1,n)]) #assert abs(x-z)