乘法逆元
(a + b) % p = (a % p + b % p) % p
(a - b) % p = (a % p - b % p) % p
(a * b) % p = (a % p * b % p) % p
(a / b) % p != (a % p / b % p) % p
数学家们无法忍受除法求模时不能满足分配律,于是定义了乘法逆元
- 定义: 若在
(mod p)
的意义下,对于一个整数a,有 a ∗ x ≡ 1 ( m o d p ) a * x \equiv 1(mod p) a∗x≡1(modp),即(a*x - 1) % p = 0那么这个整数x即为a的乘法逆元,同时a也为x的乘法逆元 - 充要条件: a存在模p的乘法逆元的充要条件是gcd(a, p) = 1, 即a与p互质
- 应用:求取 (a / b) % p 等同于a * (b的逆元) % p
真的会一直存在(a / b) % p = a * (b的逆元) % p 吗?
证明:假设b的逆元是x,有 b ∗ x ≡ 1 ( m o d p ) b * x \equiv 1(mod p) b∗x≡1(modp),假设(a / b) % p = z
- (a / b) % p = z ------------------------------------------ × b \times b ×b
- a % p = (z * b) % p ------------------------------------- × x \times x ×x
- a % p * x = (z * b) % p * x ------------------------------ 模运算与乘除运算优先级相同
- a * x % p = (z * b * x) % p
- 而 b ∗ x ≡ 1 ( m o d p ) b * x \equiv 1(mod p) b∗x≡1(modp)
- a * x % p = (z * (b * x)) % p
- a * x % p = {(z % p) * [(b * x) % p]} % p ---------------- 乘法取模满足分配律
- a * x % p = [(z % p) * 1] % p
- a * x % p = z % p
- a ∗ x ≡ z ( m o d p ) a * x \equiv z(mod p) a∗x≡z(modp)
- 所以(a / b) % p = a * x % p = z
所以(a / b) % p = a * (b的逆元) % p