Esempio n. 1
0
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" 
Esempio n. 2
0
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())