涉及C ++中模幂运算的表达式

时间:2013-10-09 15:58:15

标签: c++ modular exponentiation

我想在C ++中评估表达式(an + bn + cn) % 1000000003。当n非常大时,我遇到溢出错误。有人可以帮我弄这个吗 ?更具体地说,a = q + 1, b = - 2 * qc = q - 1。我一直在关注this

中概述的功能

我可以将(an + bn + cn) % 1000000003分成(an) % 1000000003 + (bn) % 100000003 + (cn) % 1000000003或类似名称吗? 此外,我不能使用除 unsigned long long int

之外的任何内容

1 个答案:

答案 0 :(得分:0)

您可以分发您的模数。在数学上,这将是合理的:

( ((a^n)%1000000003) + ((b^n)%100000003) + ((c^n)%1000000003) ) % 1000000003;

这将使您无需计算超出范围的数字,从而允许您为n选择更大的值。

Proof

请务必在pow模块中使用math.h

( ((pow(a, n))%1000000003) 
    + ((pow(b, n))%100000003) 
    + ((pow(c, n))%1000000003) ) % 1000000003;