取模运算性质

定义

给定一个正整数p,任意一个整数n,一定存在等式 :

n = kp + r ;

其中 k、r 是整数,且 0 ≤ r < p,则称 k 为 n 除以 p 的商,r 为 n 除以 p 的余数。

对于正整数 p 和整数 a,b,定义如下运算:

取模运算:a % p(或a mod p),表示a除以p的余数。

模p加法: ,其结果是a+b算术和除以p的余数。

模p减法: ,其结果是a-b算术差除以p的余数。

模p乘法: ,其结果是 a * b算术乘法除以p的余数。

说明:

1. 同余式:正整数a,b对p取模,它们的余数相同,记做 或者a ≡ b (mod p)。

2. n % p 得到结果的正负由被除数n决定,与p无关。例如:7%4 = 3, -7%4 = -3, 7%-4 = 3, -7%-4 = -3

基本性质

  1. 若p|(a-b),则a≡b (% p)。例如 11 ≡ 4 (% 7), 18 ≡ 4(% 7)

  2. (a % p)=(b % p)意味a≡b (% p)

  3. 对称性:a≡b (% p)等价于b≡a (% p)

  4. 传递性:若a≡b (% p)且b≡c (% p) ,则a≡c (% p)

运算规则

模运算与基本四则运算有些相似,但是除法例外。其规则如下:

  1. (a + b) % p = (a % p + b % p) % p (1)

  2. (a - b) % p = (a % p - b % p) % p (2)

  3. (a * b) % p = (a % p * b % p) % p (3)

  4. a ^ b % p = ((a % p)^b) % p (4)

  • 结合律:

    ((a+b) % p + c) % p = (a + (b+c) % p) % p (5)

((a*b) % p * c)% p = (a * (b*c) % p) % p (6)

  • 交换律:

    (a + b) % p = (b+a) % p (7)

(a * b) % p = (b * a) % p (8)

  • 分配律:

    ((a +b)% p * c) % p = ((a * c) % p + (b * c) % p) % p (9)

重要定理

  • 若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p);(10)

  • 若a≡b (% p),则对于任意的c,都有(a * c) ≡ (b * c) (%p);(11)

  • 若a≡b (% p),c≡d (% p),则 (a + c) ≡ (b + d) (%p),(a - c) ≡ (b - d) (%p),

    (a * c) ≡ (b * d) (%p),(a / c) ≡ (b / d) (%p); (12)

  • 快速乘法取模

    • 当我们计算a*b%mod的时候,往往较大的数计算a*b会超出数据的范围,这个时候使用快速乘法方法能解决上述问题.
    • 快速乘法的原理是把数分解为多项式相加。举个例子:
      30*14 = 30*(1110)2 = 30*(2^3)1+30(2^2)1+30(2^1)1+30(2^0)*0=240+120+60=420
    • 代码如下:
      typedef long long LL;
      LL q_mul(LL a, LL b, LL p){//快速乘法取模
          LL ans = 0;
          while (b){
              if(b&1LL) ans=(ans+a)%p;
              //or ans=(ans+(b%2*a)%p)%p;
              a = (a +a) % p;
              b >>= 1;
          }
          return ans;
      }
      

--------------------- 全文地址请点击:https://blog.csdn.net/qq_37025443/article/details/79339724?utm_source=copy

猜你喜欢

转载自blog.csdn.net/qq_42321579/article/details/82937426
今日推荐