Кубический корень из 128-битного целого числа в python

У меня проблема с получением кубического корня из примерно 128-битного целого числа в Python2. Следующее утверждение дает мне ошибку:

assert 188098593525197704876445094491719024115 == ((188098593525197704876445094491719024115) ** 3) ** (1.0/3)

Я попробовал класс Decimal с точностью, установленной на 600, но он все равно дает мне значение примерно для 6-12 цифр.

Как я могу заставить это работать (желательно без пользовательских библиотек)?


person ddnomad    schedule 01.04.2017    source источник
comment
Мне просто любопытно узнать, где вы могли бы применить эти вычисления длинных целых чисел? Спасибо!   -  person manvi77    schedule 01.04.2017
comment
@ manvi77 manvi77 Я пытаюсь сделать доказательство работы для взлома учебника RSA с общедоступным показателем, равным 3, и простым текстом, который намного меньше модуля шифрования. По сути, все сводится к получению кубического корня из огромного целого числа. И хотя математически это работает, я не могу заставить его работать из-за проблем с точностью.   -  person ddnomad    schedule 01.04.2017
comment
Здесь есть несколько ответов: stackoverflow.com/questions/356090/   -  person xyres    schedule 01.04.2017
comment
@xyres большое спасибо! принятый ответ фактически решает мою проблему. Хотя мне нужно совсем немного времени, чтобы понять, что он на самом деле делает.   -  person ddnomad    schedule 01.04.2017
comment
NthRoot довольно прост. Если вы умеете читать Паскаль, взгляните на мою реализацию: github .com/rvelthuis/BigNumbers/blob/master/Source/. Найдите NthRoot. В вашем случае Nth будет 3 (третий).   -  person Rudy Velthuis    schedule 02.04.2017