推导模态表达式的数学方法
下面是两个表达式,使用欧几里得除法在java中找到模(n,d)
(d + (n % d)) if (n < 0)
(n%d) if n > 0
我的问题是,
我不清楚,如果在写上面的表达式之前如何数学思考,如果n <0?
请用数学方法帮助我,因为我不想记住逻辑!
如果你想记住n % d
所做的事情,它会返回一个范围(-d, d)
的值,并将其与n的符号相匹配。
如果你想知道如何得到一个积极的结果(或严格来说,结果匹配d的符号而不是n),那么比if
更容易。
由于(n % d)
处于(-d, d)
的范围内,意味着(n % d) + n
处于(0, 2d)
的范围内,所以((n % d) + n) % d
是值在[0, d)
范围内,与n一致。
因此, ((n % d) + n) % d
是你正在寻找的东西。