如何解决如何在C ++中计算2 ^ n + 2 ^ n-1 + ... + 2 ^ k mod 2 ^ 60,其中2 ^ i的值可能非常大?
对于编程问题,我必须打印表达式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位)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。