@@ -951,7 +951,11 @@ def discrete_log(a, base, ord=None, bounds=None, operation='*', identity=None, i
951
951
ord = integer_ring .ZZ (ord )
952
952
try :
953
953
if ord == Infinity :
954
- return bsgs (base , a , bounds , identity = identity , inverse = inverse , op = op , operation = operation )
954
+ if algorithm == 'bsgs' :
955
+ return bsgs (base , a , bounds , identity = identity , inverse = inverse , op = op , operation = operation )
956
+ else :
957
+ assert algorithm == 'lambda'
958
+ return discrete_log_lambda (base , a , bounds , inverse = inverse , identity = identity , op = op , operation = operation )
955
959
if base == power (base , 0 ) and a != base :
956
960
raise ValueError
957
961
f = ord .factor ()
@@ -982,7 +986,8 @@ def discrete_log(a, base, ord=None, bounds=None, operation='*', identity=None, i
982
986
c = bsgs (gamma , h , (0 , temp_bound ), inverse = inverse , identity = identity , op = op , operation = operation )
983
987
elif algorithm == 'rho' :
984
988
c = discrete_log_rho (h , gamma , ord = pi , inverse = inverse , identity = identity , op = op , operation = operation )
985
- elif algorithm == 'lambda' :
989
+ else :
990
+ assert algorithm == 'lambda'
986
991
c = discrete_log_lambda (h , gamma , (0 , temp_bound ), inverse = inverse , identity = identity , op = op , operation = operation )
987
992
l [i ] += c * (pi ** j )
988
993
running_bound //= pi
@@ -1100,14 +1105,14 @@ def discrete_log_lambda(a, base, bounds, operation='*', identity=None, inverse=N
1100
1105
c += r
1101
1106
if mut :
1102
1107
H .set_immutable ()
1103
- mem = { H }
1108
+ mem = H
1104
1109
# second random walk
1105
1110
H = a
1106
1111
d = 0
1107
1112
while c - d >= lb :
1108
1113
if mut :
1109
1114
H .set_immutable ()
1110
- if ub >= c - d and H in mem :
1115
+ if ub >= c - d and H == mem :
1111
1116
return c - d
1112
1117
r , e = M [hash_function (H ) % k ]
1113
1118
H = mult (H , e )
0 commit comments