1 取模
在c++中, 我们可以把 ( a + b ) % m (a + b) \% m (a+b)%m化简为 ( a % m + b % m ) % m (a \% m + b \% m) \% m (a%m+b%m)%m, 同理
( a × b ) % m = ( a % m × b % m ) % m (a \times b) \% m = (a \% m \times b \% m) \% m (a×b)%m=(a%m×b%m)%m
( a − b ) % m = ( a + ( − b ) ) % m = ( a % m + ( − b ) % m ) % m = ( a % m − b % m ) % m (a - b) \% m = (a + (-b)) \% m = (a \% m + (-b) \% m) \% m = (a \% m -b \% m) \% m (a−b)%m=(a+(−b))%m=(a%m+(−b)%m)%m=(a%m−b%m)%m
但是 ( a ÷ b ) % m (a \div b) \% m (a÷b)%m可以化简为 ( a % m ÷ b % m ) % m (a \% m \div b \% m) \% m (a%m÷b%m)%m吗, 显然不行, 因为c++中的除号是整除
这就需要用到逆元, 但是在介绍之前需要先铺垫一些知识点, 想要直接跳到结尾点击此处
本文中小括号表示最大公因数: ( a , b , c , … ) (a, b, c,\dots) (a,b,c,…)代表 g c d ( a , b , c , … ) gcd(a, b, c, \dots) gcd(a,b,c,…), 百分号表示取模
2 整除
定义: 有两个正整数 a , b a, b a,b ( a ≠ 0 ) (a \ne 0) (a=0), 如果有一个正整数 k k k, 使 b = k a b = ka b=ka, 那么说明 a a a能整除 b b b, b b b能被 a a a整除, 用 a ∣ b a \mid b a∣b来表示
2.1 整除性质
2.1.1 性质1: 正负对整除无影响
a ∣ b ⇔ a ∣ − b ⇔ − a ∣ b ⇔ ∣ a ∣ ∣ ∣ b ∣ a \mid b \Leftrightarrow a \mid -b \Leftrightarrow -a \mid b \Leftrightarrow \vert a \vert \mid \vert b \vert a∣b⇔a∣−b⇔−a∣b⇔∣a∣∣∣b∣
证明: ∵ a ∣ b ∴ \because a \mid b \therefore ∵a∣b∴由定义得有一整数 c c c使 b = a c b = ac b=ac, 可以得到 − b = a ( − c ) , b = − a ( − c ) , ∣ b ∣ = ∣ a c ∣ = ∣ a ∣ ∣ c ∣ -b = a(-c), b = -a(-c), |b| = |ac| = |a||c| −b=a(−c),b=−a(−c),∣b∣=∣ac∣=∣a∣∣c∣
2.1.2 性质2: 传递
a ∣ b , b ∣ c ⇒ a ∣ c a \mid b, b \mid c \Rightarrow a \mid c a∣b,b∣c⇒a∣c
证明: ∵ a ∣ b ∴ \because a \mid b \therefore ∵a∣b∴由定义得有一整数 d d d使 b = a d b = ad b=ad, ∵ b ∣ c ∴ \because b \mid c \therefore ∵b∣c∴由定义得有一整数 e e e使 c = b e c = be c=be, ∴ c = a d e ∴ \therefore c = ade \therefore ∴c=ade∴由定义得 a ∣ c a \mid c a∣c
2.1.3 性质3
有两个整数 x , y x, y x,y
a ∣ b , a ∣ c ⇒ a ∣ ( b x + c y ) a \mid b, a \mid c\Rightarrow a \mid (bx + cy) a∣b,a∣c⇒a∣(bx