деление очень больших целых чисел в Python с использованием SageMath - PullRequest
0 голосов
/ 31 октября 2019

Я реализую экспоненциальную атаку Винера с использованием 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, но пока не нашел ничего полезного.

Есть ли что-то, что я делаюздесь не так?

1 Ответ

0 голосов
/ 31 октября 2019

Оказывается, я использовал Python2, где int/int вернул бы int. Таким образом, поскольку b было меньше, чем n в моем случае, b/n автоматически вернуло 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...