将 2 提高到大指数
Raising 2 to large exponents
我正在尝试计算两个的大指数,如下所示:2^48572234
(*注意:这是一个示例,不是我正在计算的数字之一)。但是,python 用于提高指数的内置符号在此任务上相当慢:
number = 2**<exponent>
在我的电脑上完成这个任务需要 80 多个小时(使用上面的例子)。但是,更快的方法可能是 pow
。这是一个例子:
number = pow(<exponent>)
总共需要 68 小时。但这仍然太长,尤其是当指数开始变得非常大时。另一种方法是使用 math.pow
函数,但是 OverflowError
.
会出错
我还尝试了另一种方法,我将 n
的数量附加到一个字符串中,将其转换为 int
并添加一个以获得答案。这类似于以下方法:
def genExponent(n): # generate large exponents of two.
x = ""
for i in range(n):
x += "1"
z = int(x,2)
z+=1
return z
但是,在我的示例中,这种方法在 72 小时时与其他方法一样慢。
有人对更高效的算法有任何想法吗?
这是我在评论中描述的十六进制方法:
def hex(exponent):
sig_exp = exponent % 4
sig = 2**sig_exp
zeroes = (exponent - sig_exp) // 4
return str(sig) + (zeroes * '0')
x = hex(1234567)
ix = int(x, 16)
# Equivalent exponential operator
# ix = 2*1234567
它似乎 运行 相当快,但不一定比指数运算符选项快得多(实际上差不多)。我只在一个在线仓库中测试过它,当我尝试创建一个你在问题中描述的大小的 string/integer 时,我不喜欢它,所以我不知道它在那里的表现如何。
我正在尝试计算两个的大指数,如下所示:2^48572234
(*注意:这是一个示例,不是我正在计算的数字之一)。但是,python 用于提高指数的内置符号在此任务上相当慢:
number = 2**<exponent>
在我的电脑上完成这个任务需要 80 多个小时(使用上面的例子)。但是,更快的方法可能是 pow
。这是一个例子:
number = pow(<exponent>)
总共需要 68 小时。但这仍然太长,尤其是当指数开始变得非常大时。另一种方法是使用 math.pow
函数,但是 OverflowError
.
我还尝试了另一种方法,我将 n
的数量附加到一个字符串中,将其转换为 int
并添加一个以获得答案。这类似于以下方法:
def genExponent(n): # generate large exponents of two.
x = ""
for i in range(n):
x += "1"
z = int(x,2)
z+=1
return z
但是,在我的示例中,这种方法在 72 小时时与其他方法一样慢。
有人对更高效的算法有任何想法吗?
这是我在评论中描述的十六进制方法:
def hex(exponent):
sig_exp = exponent % 4
sig = 2**sig_exp
zeroes = (exponent - sig_exp) // 4
return str(sig) + (zeroes * '0')
x = hex(1234567)
ix = int(x, 16)
# Equivalent exponential operator
# ix = 2*1234567
它似乎 运行 相当快,但不一定比指数运算符选项快得多(实际上差不多)。我只在一个在线仓库中测试过它,当我尝试创建一个你在问题中描述的大小的 string/integer 时,我不喜欢它,所以我不知道它在那里的表现如何。