我如何在 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 位)。
对于一道编程题,我必须打印表达式 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 位)。