3

注意:我假设下面的所有运算符都是左关联的。
a - b - c等于a - (b + c)
a / b / c等于a / (b * c)

模运算符是否有类似的等价物?
我认为这a % b % c等于a % bifb <= ca % cif b > c && b % c == 0。但是,我不知道什么a % b % c等于 when b > c && b % c != 0。是否有更通用或更优雅的方式来考虑链式模运算符?此外,您能想到最后一种类型的链式模运算符的任何算法或用法吗?

4

2 回答 2

2

让我们来b = q0*c + r0

你分解

a  = q1 * b + r1
r1 = q2 * c + r2

a = q1 * (q0 * c + r0) + q2 * c + r2

a = (q1 * q0 + q2) * c + q1 * r0 + r2  

所以你可以这么说

r2 = (a - q1 * r0) % c

或者换句话说

(a%b%c) = (a - (a/b)*(b%c)) % c

这也适用于b<c,因为(a - (a/b)*b)只是a%b

但我怀疑这是否非常有用

于 2013-07-04T22:28:43.253 回答
1

链式模运算符一般没有特殊含义,结果实际上可能定义不明确。

如果您将模 p 视为从整数到某个集合的投影{k, ... k + p - 1},那么链接两个投影可能无法在数学上明确定义,因为链接取决于k(更准确地说,链接% p% q取决于k % q)的选择。

要将其带到编程世界,请注意 C 标准要求 的符号是在非正数a % b时定义的实现。a

例如:-1 % 3可能是-12取决于实现。然后,(-1 % 3) % 2可能是0,1-1一个,具体取决于实现...

于 2014-10-28T20:26:27.623 回答