嗨,我需要计算(2^n + (-1)^n) % 10000007
其中1 < n < 10^9
我应该如何用c ++编写程序?
我知道这个mod属性 (a + b)%n =(a%n + b%n)%n但这对我没用。
答案 0 :(得分:3)
鉴于
(a + b)%m =(a%m + b%m)%m
然后,用2的相同幂替换a和b,你就会重现:
2 k + 1 %m =(2 k %m + 2 k %m)%m
您可能已经认为您的公式允许您将问题分解为:
(2 n +( - 1) n )%P =(2 n %P +( - 1) ñ%P)%P
然后,请注意(-1) k 是1或-1,您应该能够在 O (n)时间内计算问题。 / p>