def modExp(a, d, n):
    """returns a ** d (mod n)"""
    assert d >= 0
    assert n >= 0
    base2D = int2baseTwo(d)
    base2DLength = len(base2D)
    modArray = []
    result = 1
    for i in range(1, base2DLength + 1):
        if i == 1:
            modArray.append(a % n)
        else:
            modArray.append((modArray[i - 2] ** 2) % n)
    for i in range(0, base2DLength):
        if base2D[i] == 1:
            result *= base2D[i] * modArray[i]
    return result % n
def modExp ( a , d , n ) : assert d >= 0 assert n >= 0 base2D = int2baseTwo ( d ) base2DLength = len ( base2D ) modArray = [ ] result = 1 for i in range ( 1 , base2DLength + 1 ) : if i == 1 : modArray . append ( a % n ) else : modArray . append ( ( modArray [ i - 2 ] ** 2 ) % n ) for i in range ( 0 , base2DLength ) : if base2D [ i ] == 1 : result *= base2D [ i ] * modArray [ i ] return result % n
returns a ** d (mod n)