微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将2提高到大指数

如何解决将2提高到大指数

我正在尝试计算两个较大的指数,例如: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

它似乎运行得相当快,尽管不一定比指数运算符选项要快得多(实际上差不多)。当我尝试创建问题中描述的大小的字符串/整数时,我只在不喜欢它的在线仓库中对其进行了测试,所以我不知道它在那里的表现。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。