我正在解决一个问题,需要我计算集合的所有可能子集的平方和。我被要求退还这笔款项,取模10 ^ 9 + 7
我了解逻辑。我只需要对平方求和并将结果乘以2 ^ N-1,其中N是集合的大小。
但是问题是N可以大到10 ^ 5。 为此,我得到了整数溢出。 我研究了快速的模幂运算,但仍然在哪里存储2 ^ 100000的东西? 当我计算2的幂时,可以使用模数来降低数值吗?那不会改变最终值吗?
如果有人可以告诉我如何获得它或阅读什么,那将真的很有帮助。
答案 0 :(得分:0)
如果您使用2 ^ {something_big
对某些值取模,则仅意味着您不必输出something_big
之后的位。例如x%power(2,10) == x%(1<<10) == x&(1<<10 - 1) == x&1023
。
因此,在您的情况下,问题是在计算模数之前的实际值,同时请记住您只需要99999位。所有高位都将被丢弃(如果我正确理解您的前提,则不会影响结果)。
顺便说一句。可以存储99999位。只有13kB。