Я реализую экспоненциальную атаку Винера с использованием Python и SageMath.
Мой код выглядит следующим образом
from sage.all import *
# constants
b = some_very_large_number
n = some_very_large_number
b_over_n = continued_fraction(b/n)
while True:
t_over_a = b_over_n.convergent(i+1)
t = t_over_a.numerator()
a = t_over_a.denominator()
# check if t divides ab-1
if ((t != 0) and (gcd(a*b-1, t)== t)):
print("Found i: ", i)
break
i += 1
Я обнаружил, что цикл не закончится навсегда, и добавил эту строкукод перед циклом while.
print(b_over_n.convergent(5))
И я обнаружил, что b_over_n
всегда возвращал 0, несмотря ни на что. Я также распечатал type(b_over_n)
и проверил, что он типа 'long'
.
Я проверил руководства SageMath, но пока не нашел ничего полезного.
Есть ли что-то, что я делаюздесь не так?