gpt4 book ai didi

python - 如何在合理的时间内将绝对庞大的数字转换为字符串?

转载 作者:IT老高 更新时间:2023-10-28 22:21:23 25 4
gpt4 key购买 nike

我知道这是一个很奇怪的问题,但我正在尝试获取文件中当前最大素数的副本。以整数形式获取数字相当容易。我只是运行它。

prime = 2**74207281 - 1

大约需要半秒钟,它工作得很好。操作也相当快。将其除以 10(不带小数)以快速移动数字。但是,str(prime) 需要很长时间。我像这样重新实现了 str,发现它每秒处理大约一百个数字。

while prime > 0:
strprime += str(prime%10)
prime //= 10

有没有办法更有效地做到这一点?我正在用 Python 做这个。我应该用 Python 试试这个,还是有更好的工具呢?

最佳答案

众所周知,重复的字符串连接效率低下,因为 Python 字符串是不可变的。我会去的

strprime = str(prime)

在我的基准测试中,这始终是最快的解决方案。这是我的小基准程序:

import decimal

def f1(x):
''' Definition by OP '''
strprime = ""
while x > 0:
strprime += str(x%10)
x //= 10
return strprime

def digits(x):
while x > 0:
yield x % 10
x //= 10

def f2(x):
''' Using string.join() to avoid repeated string concatenation '''
return "".join((chr(48 + d) for d in digits(x)))

def f3(x):
''' Plain str() '''
return str(x)

def f4(x):
''' Using Decimal class'''
return decimal.Decimal(x).to_eng_string()

x = 2**100

if __name__ == '__main__':
import timeit
for i in range(1,5):
funcName = "f" + str(i)
print(funcName+ ": " + str(timeit.timeit(funcName + "(x)", setup="from __main__ import " + funcName + ", x")))

对我来说,这会打印(使用 Python 2.7.10):

f1: 15.3430171013
f2: 20.8928260803
f3: 0.310356140137
f4: 2.80087995529

关于python - 如何在合理的时间内将绝对庞大的数字转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34936226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com