繁体   English   中英

将 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

它似乎运行得相当快,但不一定比指数运算符选项明显快(实际上大致相同)。 当我尝试创建您在问题中描述的大小的字符串/整数时,我只在不喜欢它的在线存储库中对其进行了测试,所以我不知道它在那里的表现如何。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM