如果重用变量值,如何将变量保持在常量之下?

时间:2016-08-19 12:52:57

标签: c++ algorithm

我有像

这样的代码
for(...)
{
    K=K*X; //X is some equation
    answer=answer+K%C;
}

变量answer是我感兴趣的,而K只是一个中间值。如您所见,我只对K%C而非K感兴趣。但我不能在for循环中K=K%C,因为它会给出错误的结果。但是目前K值增长非常快并且溢出。

我怎么能控制K的值而不会得到错误的结果呢?

3 个答案:

答案 0 :(得分:4)

您可以利用身份

ab mod n = (a mod n)(b mod n) mod n

K = K * X;替换为K = ((K % C) * (X % C)) % C;

然后answer = answer + K % C;变为answer += K;

答案 1 :(得分:2)

试试这个:

K = K%C;

for (...)
{
    K = K*X%C;
    answer = answer+K;
}

答案 2 :(得分:0)

还无法对其他答案发表评论,但我认为循环外K = K%C;的初始化不正确。只需循环即可。

for( ... )
{
     K=K*X%C;
     answer=answer+K;
}

为什么这样做的原因是没有必要在K内累积C的额外倍数。假设K是第一次迭代,并且K'是下一次迭代,然后K&n; * X =(K / C)* X +(K%C)* X.所以我们可以在每次迭代中删除(K / C)* X部分。