gpt4 book ai didi

c++ - C++中带负数的模

转载 作者:IT老高 更新时间:2023-10-28 21:45:08 25 4
gpt4 key购买 nike

我一直在为以下递归关系编写程序:

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每件事似乎都是真的..但是我对某些值的回答是否定的..由于这个问题,我无法找到正确的解决方案...请帮助关于保存 Modulus

的正确位置

最佳答案

问题是 % 运算符不是“模运算符”,而是具有以下相等性的“除余”运算符

(a/b)*b + a%b == a    (for b!=0)

所以,如果你的整数除法向零舍入(我认为这是自 C99 和 C++11 以来的强制要求),-5/4 将是 -1,我们有

(-5/4)*4 + -5%4 == -5
-1 *4 -1 == -5

为了得到正的结果(对于模运算),您需要添加除数以防余数为负或执行以下操作:

long mod(long a, long b)
{ return (a%b+b)%b; }

关于c++ - C++中带负数的模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12276675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com