1093 Count PAT's (25分)

  • 对于整型数 \(a\)\(b\),求模运算mod或者求余运算rem的方法:

    1. 求整数商:\(c = [a/b]\);

    2. 计算模或者余数:\(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\) 的一样。

  • 模运算的规则

    1. \((a \pm b) \% p = (a \% p \pm b \% p) \% p\)

    2. \((a * b) \% p = (a \% p * b \% p) \% p\)

    3. \(a ^ b \% p = (a \% p)^b \% p\)

    4. 结合律

      • \(((a+b) \% p + c) \% p = (a + (b+c) \% p) \% p\)

      • \(((a*b) \% p * c) \% p = (a * (b*c) \% p) \% p\)

    5. 交换律

      • \((a + b) \% p = (b+a) \% p\)

      • \((a * b) \% p = (b*a) \% p\)

    6. 分配率

      \(((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

posted @ 2020-08-06 22:01  Blind  阅读(60)  评论(0编辑  收藏  举报