D'une certaine manière, je peux montrer que l'algorithme de recherche binaire est  .O ( l g n ⋅ ( l g l g n )2)
Tout d'abord,  , il y a b < l g n . Algorithme de recherche binaire:  
Pour chaque b , nous utilisons la recherche binaire pour trouver a .uneb= nb < l g n
 
bune
Chaque fois, le calcul d'  coûte l g b = l g l g n opérations en utilisant   une exponentiation rapide . Par conséquent, le problème restant est la plage de a .unebl g b = l g l g nune
Si  est la valeur maximale possible de a , alors la recherche binaire a besoin de    l g opérations AUNEunel g UNE
Notez que  , soit 
 l g A = l g nb l g  a = l g n 
résumer,
∑lgA=lgn⋅(1
l g A = l g nb
∑ l g A = l g n ⋅ ( 11+ 12+ . . . + 1B) = l g n ⋅ l g B = l g n ⋅ l g l g n
O ( l g n ⋅ l g l g n )
unebO ( l g n ⋅ ( l g l g n )2)
ps: Tous les lg sont en base 2.
Code Python:
#--- a^n ---------------------------------------
def fast_exponentation(a, n):
    ans = 1
    while n:
        if n & 1 : ans = ans * a
        a = a * a
        n >>= 1
    return ans
#------------------------------------------
# Determines whether n is a power a ^ b, O(lg n (lg lg n) ^ 2)
def is_power(n):
    if (- n & n) == n: return True  # 2 ^ k
    lgn = 1 + ( len( bin ( abs ( n ) ) ) - 2)
    for b in range(2,lgn):
        # b lg a = lg n
        lowa = 1L
        higha = 1L << (lgn / b + 1)
        while lowa < higha - 1:
            mida = (lowa + higha) >> 1
            ab = fast_exponentation(mida,b) 
            if ab > n:   higha = mida
            elif ab < n: lowa  = mida
            else:   return True # mida ^ b
    return False