我想在C ++中评估表达式(an + bn + cn) % 1000000003
。当n非常大时,我遇到溢出错误。有人可以帮我弄这个吗 ?更具体地说,a = q + 1, b = - 2 * q
和c = q - 1
。我一直在关注this
我可以将(an + bn + cn) % 1000000003
分成(an) % 1000000003 + (bn) % 100000003 + (cn) % 1000000003
或类似名称吗?
此外,我不能使用除 unsigned long long int
答案 0 :(得分:0)
您可以分发您的模数。在数学上,这将是合理的:
( ((a^n)%1000000003) + ((b^n)%100000003) + ((c^n)%1000000003) ) % 1000000003;
这将使您无需计算超出范围的数字,从而允许您为n
选择更大的值。
请务必在pow
模块中使用math.h
:
( ((pow(a, n))%1000000003)
+ ((pow(b, n))%100000003)
+ ((pow(c, n))%1000000003) ) % 1000000003;