繁体   English   中英

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

[英]How do I keep variable below a constant if the variable value is reused?

我有一个代码

for(...)
{
    K=K*X; //X is some equation
    answer=answer+K%C;
}

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

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

您可以利用身份

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;

试试这个:

K = K%C;

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

还没有评论其他答案,但我相信K = K%C;的初始化K = K%C; 循环外是不正确的。 只需循环即可。

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

为什么这个有效的原因是没有必要在K内累加C的额外倍数。假设K是第一次迭代,K'是下一次迭代,那么K'* X =(K / C)* X +( ķ%C)* X。 所以我们可以在每次迭代中删除(K / C)* X部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM