gpt4 book ai didi

python - 是否可以在python中将一个非常大的int快速转换为一个字符串

转载 作者:行者123 更新时间:2023-12-05 00:10:00 26 4
gpt4 key购买 nike

我正在构建一个生成大量整数的加密程序。它看起来像这样:

a = plaintextOrd**bigNumber

当我做

a = str(a)

需要28分钟以上。

有没有办法比使用内置的 str() 函数更快地转换这样的整数?

我需要它是一个字符串的原因是因为这里的这个函数:

def divideStringIntoParts(parts,string):
parts = int(parts)
a = len(string)//parts

new = []
firstTime = True
secondTime = True
for i in range(parts):
if firstTime:
new.append(string[:a])
firstTime = False
elif secondTime:
new.append(string[a:a+a])
secondTime = False
else:
new.append(string[a*i:a*(i+1)])

string2 = ""
for i in new:
for i in i:
string2 += i

if len(string2) - len(string) != 0:
lettersNeeded = len(string) - len(string2)
for i in range(lettersNeeded):
new[-1] += string[len(string2) + i]

return new

最佳答案

您在评论中写道,您希望以十进制格式获取整数的长度。您不需要将此整数转换为字符串,您可以使用 "common logarithm" 代替:

import math
math.ceil(math.log(a, 10))

此外,如果您知道:
a = plaintextOrd**bigNumber

那么 math.log(a, 10) 等于 math.log(plaintextOrd, 10) * bigNumber ,计算时间不应超过几毫秒:
>>> plaintextOrd = 12345
>>> bigNumber = 67890
>>> a = plaintextOrd**bigNumber
>>> len(str(a))
277772
>>> import math
>>> math.ceil(math.log(a, 10))
277772
>>> math.ceil(math.log(plaintextOrd, 10) * bigNumber)
277772

即使 a 不适合您的硬盘驱动器,它也应该可以工作:
>>> math.ceil(math.log(123456789, 10) * 123456789012345678901234567890)
998952457326621672529828249600

正如@kaya3 所提到的,Python 标准浮点数不够精确,无法描述如此大的数字的确切长度。

您可以使用 mpmath (任意精度浮点运算)来获得所需精度的结果:
>>> from mpmath import mp
>>> mp.dps = 1000
>>> mp.ceil(mp.log(123456789, 10) * mp.mpf('123456789012345678901234567890'))
mpf('998952457326621684655868656199.0')

关于python - 是否可以在python中将一个非常大的int快速转换为一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59009244/

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