我一直在编写一个计算以下递归关系的程序:
An = 5An-1 - 2An-2 - An-3 + An-4
输出应为答案模 10^9 + 7 的余数。 我写了一个暴力解法,如下所示...
long long int t1=5, t2=9, t3=11, t4=13, sum;
while(i--)
{
sum=((5*t4) - 2*t3 - t2 +t1)%MOD;
t1=t2;
t2=t3;
t3=t4;
t4=sum;
}
printf("%lld\n", sum);
当 MOD= 10^9 +7
时,一切看起来都是正确的...但我在某些值上得到了负数的答案...由于这个问题,我无法找到正确的解决方案...请帮忙确定在何处放置模数
才是正确的。
unsigned long long
类型来存储sum
吗? - Alex1985%
运算符始终返回正值,那么它不会产生任何影响,但由于有时会给出负结果,因此应使用有符号变量。 - Brian L