当n在C 中超过64时,如何计算POW(2,N)

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

本文关键字:计算 何计算 POW 中超 64时      更新时间:2023-10-16

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

我尝试使用未签名的长长int,但由于C 的极限仅为2^64。因此,是否有任何方法来计算此方法。

编辑:

 1 < n < 10^5

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

在在线平台上问这个问题。

问题

您用数组 a 的大小 n 给予。如果元素 AI 如果其值( ai (大于或等于 ki ki 是由元素 a ai 组成的数组 a 的子集总数。
数组的总充电值定义为数组 mod(10^9( 7 的所有电荷元素的总和。
您的任务是输出给定数组的总充电值。

这里的一个重要细节是,不要求您计算巨型n的2 n 。相反,您被要求计算2 n mod 10 9 7对于大N,这是一个不同的问题。

例如,让我们假设您要计算2 70 mod 10 9 1.请注意2 70 不适合一个64位机器。但是,2 70 = 2 30 &middot;2 35 和2 35 确实适合64位机器。因此,我们可以执行此计算以获得2 70 mod 10 9 7:

2 70 (mod 10 9 7(

= 2 35 &middot;2 35 (mod 10 9 7(

=(2 35 mod 10 9 7(&middot;(2 35 mod 10 9 7(mod 10 9 7

=(34359738368 mod 10 9 7(&middot;(34359738368 mod 10 9 7(mod 10 9 7

=(359738130&middot; 359738130(mod 10 9 7

= 129411522175896900 mod 10 9 7

= 270016253

更一般地,通过使用重复的平方,您可以计算2 n mod 10 9 7,以n的任何值,以一种非常适合64--位整数。

希望这会有所帮助!

严重数值工作中的常见方法是重写公式的方法。您存储log(x)而不是x,然后在您确实需要x时,通常会在您不需要所有这些数字的上下文中。