模块化算术 - 竞争性编程

Dan*_*vec 6 c++ math modular-arithmetic

我看到很多有竞争力的程序员用((a + b) % d + d) % dC++ 编写代码.他们为什么不使用(a + b) % d+ d括号里面有什么用?它与负数有关吗?

谢谢

Bat*_*eba 9

是的,你是对的.在C++ 11之前%,负参数的余数运算符的行为留给了实现,受到一些约束.d只要该参数中的其他项总和大于或等于,那么添加到左参数可以有所帮助-d,而一般情况并非如此.(在您的特定情况下,对于负数的情况的-a / d倍数将是更好的附加常数.)da