问题描述
对于编程问题,我必须打印表达式2^n+2^n-1+...+2^k mod 2^60
,其中1<=k<n<=240
?
基本上,如何计算2 ^ 240 mod 2 ^ 60?如果可以解决,我也可以使其适用于n
我在这里阅读答案: How can I calculate 2^n for large n?
但是,这会计算出较大的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
- n> = 59:结果为-2 ^ k
- n
由于条件的缘故,所有这些数字都可以计算出来,因为它可以正确地适合长变量(64位)。