【发布时间】:2016-05-11 22:40:28
【问题描述】:
我有两个 unsigned longs a 和 q,我想找到一个介于 0 和 q-1 之间的数字 n,这样 n + a 可以被 q 整除(没有溢出)。
换句话说,我正在尝试找到一种(便携式)计算(-a)%q 的方法,它位于0 和q-1 之间。 (该表达式的符号是在 C89 中实现定义的。)有什么好的方法来做到这一点?
【问题讨论】:
标签: math integer standards modulus c89
我有两个 unsigned longs a 和 q,我想找到一个介于 0 和 q-1 之间的数字 n,这样 n + a 可以被 q 整除(没有溢出)。
换句话说,我正在尝试找到一种(便携式)计算(-a)%q 的方法,它位于0 和q-1 之间。 (该表达式的符号是在 C89 中实现定义的。)有什么好的方法来做到这一点?
【问题讨论】:
标签: math integer standards modulus c89
您要查找的内容在数学上等价于 (q - a) mod q,而后者又等价于 (q - (a mod q)) mod q。因此,我认为您应该能够按如下方式计算:
unsigned long result = (q - (a % q)) % q;
【讨论】: