def bsgs(g, h, p): N = 1+(floor(sqrt(p))) #Store big steps in bTree so that we can search in logn time L1 = BinaryTree({pow(g, i, p) : i for i in range(N)}) # Precompute via Fermat's Little Theorem c = pow(g, N * (p - 2), p) #Store Little Steps L2 = BinaryTree({(h * pow(c, j, p)) % p: j for j in range(N)}) for key in L2.keys(): #O(n) if L1.__contains__(key): #computed in log(n) time x= (L2.get(key) * N + L1.get(key)) print(x, "is a solution for x") return "Done"
from bintrees import BinaryTree data = {3:'White', 2:'Red', 1:'Green', 5:'Orange', 4:'Yellow', 7:'Purple', 0:'Magenta'} tree = BinaryTree(data) tree.update({6: 'Teal'}) def displayKeyValue(key, value): print('Key: ', key, ' Value: ', value) tree.foreach(displayKeyValue) print('Item 3 contains: ', tree.get(3)) print('The maximum item is: ', tree.max_item())