【发布时间】:2021-01-19 10:09:37
【问题描述】:
对于编程问题,我必须打印表达式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^240 mod 2^60= 0 -
这对你有帮助吗:en.wikipedia.org/wiki/Modular_exponentiation?基本上:1. 无论如何你都可以分别做每个求和,2. (a*b) mod m = (a mod m)*(b mod m) mod m
-
@Aziuth 我不认为这在这种情况下很有用
-
2^n 只是 1 后跟 n 个零。你可以把它当作一个字符串来做。
-
所有 > 60 的幂都变成 0 mod 2^60,所以你可以忽略它们。其他的可以通过 64 位 int 中的左移来计算。简单。可能你所要求的并不是你真正想要的。
标签: c++ algorithm performance exponent exponentiation