我如何在 C++ 中计算 2^n+2^n-1+...+2^k mod 2^60,其中 2^i 的值可能非常大?

How can I calculate 2^n+2^n-1+...+2^k mod 2^60 in C++, where the value of 2^i can be very big?

对于一道编程题,我必须打印表达式 2^n+2^n-1+...+2^k mod 2^60,其中 1<=k<n<=240?

基本上,我如何计算 2^240 mod 2^60?如果这个问题可以解决,我也可以让它适用于 n<240!

我在这里阅读了一个答案:

但是,计算的是 n 的大值而不是 2^n

有什么帮助吗?

2^k + 2^k+1 + ... + 2^n-1 + 2^n mod 2^60

=

2^k * (2^0 + 2^1 + ... + 2^n-k-1 + 2^n-k) mod 2^60

=

2^k * ((2^n-k+1)-1) mod 2^60

=

(2^n+1 - 2^k) mod 2^60

=

(2^n+1 mod 2^60 - 2^k mod 2^60) mod 2^60
  • k >= 60: 结果为 0 因为 2^n+1 和 2^k 都可以除以 2^60
  • k < 60:
    • n >= 59: 结果为 -2^k
    • n < 59: 结果是 2^n+1 - 2^k

由于这些条件,所有这些数字都可以计算出来,因为适合长变量(64 位)。