对于整型数 \(a\),\(b\),求模运算mod
或者求余运算rem
的方法:
求整数商:\(c = [a/b]\);
计算模或者余数:\(r = a - c*b\).
区别:第一步不同
求模运算mod
:在求 \(c\) 的值时,向 \(-\infty\) 方向舍入
求余运算rem
:在求 \(c\) 的值时,向 \(0\) 方向舍入
例如:计算 \(-7 \% 4\)
mod | rem | |
---|---|---|
\(c\) | \(-2\) | \(-1\) |
\(r\) | \(1\) | \(-3\) |
?? 当 \(a\) 和 \(b\) 的正负号一样的时候,两个运算的结果是等同的;当 \(a\) 和 \(b\) 的符号不同时,rem
结果的符号和 \(a\) 的一样,而mod
的和 \(b\) 的一样。
模运算的规则
\((a \pm b) \% p = (a \% p \pm b \% p) \% p\)
\((a * b) \% p = (a \% p * b \% p) \% p\)
\(a ^ b \% p = (a \% p)^b \% p\)
结合律
\(((a+b) \% p + c) \% p = (a + (b+c) \% p) \% p\)
\(((a*b) \% p * c) \% p = (a * (b*c) \% p) \% p\)
交换律
\((a + b) \% p = (b+a) \% p\)
\((a * b) \% p = (b*a) \% p\)
分配率
\(((a +b)\% p * c) \% p = ((a * c) \% p + (b * c) \% p) \% p\)
重要定理
若\(a \equiv b (\% p)\),则对于任意的\(c\),都有\((a + c) \equiv (b + c) (\%p)\);
若\(a \equiv b (\% p)\),则对于任意的\(c\),都有\((a * c) \equiv (b * c) (\%p)\);
若\(a \equiv b (\% p)\),\(c \equiv d (\% p)\),则 \((a + c) \equiv (b + d) (\%p)\),\((a - c) \equiv (b - d) (\%p)\),\((a * c) \equiv (b * d) (\%p)\);
各个环境下%
运算符的含义不同,比如c/c++,java 为取余,而python则为取模
?? code
原文:https://www.cnblogs.com/goldenretriever/p/13449335.html