Как вы визуализируете огромное целое число в 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