c++中n超过64时如何计算pow(2,n)?

How to calculate pow(2,n) when n exceeds 64 in c++?

所以,我是 C++ 编程的新手,我遇到了这个问题,我需要计算 pow(2,n)/2 where n>64 ?

我试过使用 unsigned long long int 但因为 c++ 的限制只有 2^64。那么有没有什么方法可以计算呢

编辑:

 1 < n < 10^5

表达式的结果用于进一步计算

这个问题是在网上问的platform.So,我不能用像gmp这样的库来处理大数。

问题

给你一个大小为 N 的数组 A。如果元素 Ai 的值 (Ai) 大于或等于 KiKi 是由元素 [ 组成的数组 A 的子集总数=25=]爱.
阵列的总电荷值定义为阵列中存在的所有带电元素的总和 mod (10^9)+7.
你的任务是输出给定数组的总电荷值。

在严肃的数值计算中,常用的方法是重写公式。您存储 log(x) 而不是 x,稍后当您确实需要 x 时,它通常位于您不需要所有这些数字的上下文中。

此处的一个重要细节是,您不会被要求为巨大的 n 计算 2n。相反,您被要求为大 n 计算 2n mod 109 + 7,这是一个不同的问题。

例如,假设您要计算 270 mod 109 + 1。请注意 270 不适合 64 位机器字。但是,270 = 230 · 235,235 确实适合 64 位机器字。因此,我们可以计算得到 270 mod 109 + 7:

270 (mod 109 + 7)

= 235 · 235 (mod 109 + 7)

= (235 mod 109 + 7) · (235 mod 109 + 7) mod 109 + 7

= (34359738368 mod 109 + 7) · (34359738368 mod 109 + 7) mod 109 + 7

= (359738130 · 359738130) mod 109 + 7

= 129411522175896900 mod 109 + 7

= 270016253

更一般地,通过使用 repeated squaring,您可以计算 2n mod 109 + 7以适合 64 位整数的方式获取 n 的任何值。

希望对您有所帮助!