模运算
模运算即求余运算:在数学中用符号 mod 表示。模 p 运算的定义如下:
给定一个正整数 p,任意一个整数 n,一定存在等式:n=kp+r(k、r 是整数,且 0<=r < p),称 k 为 n 除以 p 的商,r 为 n 除以 p 的余数,记着:r=n mod p。
针对模 p 运算,可以数环来理解:一个圆环有 p 米,并标刻度:0,1,…,p-1:
◆k=n/p:表示一个人在这个环上沿顺时针跑的长总长度 n,k 表 示跑的整圈数;
◆r=a mod p,r 表示这个人最后停留在 r 点上;
模算术公式
(a+b) mod p = (a mod p + b mod p) mod p
(a*b) mod p = ((a mod p) * (b mod p)) mod p
(a-b) mod p = ((a mod p)-(b mod p) + p) mod p
在 C++中有求余运算符号’%’,也是求余数功能,但和 mod 有区别,mod 的结果一定是非负数, 而%则不一定,但参与运算的数都是正整数的情况下是等价的。
例如:
a%p=(a mod p + p)mod p
%的运算规则是:a%b = a-a/b*b
同余
如果 a 和 b 除以 p 的余数相同,则说 a 和 b 关于模 p 同余,记作:
a≡b(mod p) ÍÎ a mod p = b mod p
定理:
a≡b(mod n) 的充要条件 a-b=n*y(即 a-b 是 n 的倍数)
这个定理得证明很简单:
b mod n == (b+y*n) mod n == a mod n
剩余系
所谓“剩余系”,就是指对于某一个特定的正整数 n,一个整数集中的数模 n 所得的余数域。
例如 n=10,则整数集:{5,20,14,17,15}的剩余系为{0,4,5,7}
如果一个剩余系中包含了这个正整数所有可能的余数(一般地,对于任意正整数 n,有 n 个余数:
0,1,2,…,n-1),那么就被称为是模 n 的一个完全剩余系。
在剩余系中,每个元素代表的是一个同余等价类:比如 n=5,则元素 3 代表了 {3,8,13,18,…,3+k*5}