计算大数的模数

时间:2014-02-22 17:56:49

标签: c++ c modulus

嗨,我需要计算(2^n + (-1)^n) % 10000007 其中1 < n < 10^9

我应该如何用c ++编写程序?

我知道这个mod属性 (a + b)%n =(a%n + b%n)%n但这对我没用。

1 个答案:

答案 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>