Как вы визуализируете огромное целое число в Python?

Итак, просто для развлечения, я хотел увидеть самое большое простое число, которое мы обнаружили, своими собственными глазами (2^277,232,917 - 1 в соответствии с этим), которое представляет собой число 23 249 425 цифр. О, парень. Итак, я начал с вычисления числа вручную в Python: 2**277232917-1 который дал бы мне ответ... в конце концов... когда-нибудь. Прождав полчаса, пока одно из моих ядер работало все время, я начал искать более быстрое решение для решения показателей. Я нашел этот драгоценный камень в Википедии, известный как

Возведение в степень при возведении в квадрат

def exp_by_squaring(x, n):
    if n<0:
        return exp_by_squaring(1 / x, -n)
    elif x==0:
        return 1
    elif x==1:
        return x
    elif n%2==0:
        return exp_by_squaring(x * x,  n / 2)
    elif not n%2==0:
        return x * exp_by_squaring(x * x, (n - 1) / 2)

После подключения к консоли python3 и ввода t=exp_by_squaring(2, 277232917)-1 и жду.. о, подождите, это сделано! Я люблю эту концепцию. Теперь с этим номером я могу print(str(t)) и он снова замерз. Предположим, я могу дать ему записать в файл за ночь f=open("LargestPrime", "w") f.write(str(t)) f.close(), На следующее утро с одним 23,2 МБ текстовым файлом, пытаясь открыть его, он просто зависает и снова душит ядро. Я думаю, это слишком много, чтобы даже показать.

Как бы вы достигли этого? Не могли бы вы разделить int на отдельные части, а затем преобразовать их в строки, чтобы записать их в отдельные файлы? Сохраню ли я его в другом формате? Как я могу сократить время, необходимое для преобразования этой цифры 23M+ int в строку? Как я мог практически отобразить такое большое число? Я что-то здесь упускаю?

1 ответ

Из википедии, https://en.wikipedia.org/wiki/Largest_known_prime_number, текущий рекордсмен был сделан в этом месяце и они показывают первую и последнюю цифры числа, вот фрагмент из Википедии:

      Current record
The record is currently held by 2^82,589,933 − 1 with 24,862,048 digits, found by GIMPS in December 2018.[1] Its value is:

148894445742041325547806458472397916603026273992795324185271289425213239361064475310309971132180337174752834401423587560 ...

(24,861,808 digits omitted)

... 062107557947958297531595208807192693676521782184472526640076912114355308311969487633766457823695074037951210325217902591[6]

The first and last 120 digits are shown above.

Вы можете сами увидеть цифры в python следующим образом:

      
In [304]: t = pow(2,82589933)-1                                                                                                                                 

In [305]: n = 24862048-1000                                                                                                                                     

In [306]: a = pow(10,n)                                                                                                                                         

In [310]: f = t // a                                                                                                                                            

In [311]: len(str(f))                                                                                                                                           
Out[311]: 1000

In [312]: f                                                                                                                                                     
Out[312]: 1488944457420413255478064584723979166030262739927953241852712894252132393610644753103099711321803371747528344014235875600519775183265856491842931959708229506343343451097313699205342310641140595264767876746819332211781849375477107986211226534792788629942124472358169794644246737226991115661546889834987857788089927363336356512975433528625745217905541113567854803029538259231829040461918808066672007922224457105930988153887394047699962279207194319396507712065726965912877889178044489321452540526892581106697213587260581303968314495108439814585421184420014843770161064290389581708297705941888994879327016081279727414348185908077459964865519006267229417152151375452828119103082446114401235115945685219674703882657903762551993641583352385315154281845586882595358954721029880984778088370168635141972524013277223153442722574718130614762581537465586626911838102926072292274274159167780554098619357220471593661193199616071805842054109436528998477753168262245190870602541591290575551503401919575208699092280595
Другие вопросы по тегам