1093 Count PAT's (25分)
-
对于整型数 \(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