简单得求余概念:
- ( 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 ) % p > 0 (a-b)\%p=(a\%p-b\%p+p)\%p>0 (a−b)%p=(a%p−b%p+p)%p>0
- ( a ∗ b ) % p = ( a % p ∗ b % p ) % p (a*b)\%p=(a\%p*b\%p)\%p (a∗b)%p=(a%p∗b%p)%p
但是除运算就不能这样分解了,对于一些非常大的数字取模,当出现除法时,该怎么办?
这时我们就需要逆元,又称数论倒数。除数 b b b关于模数 p p p的逆元用 i n v ( b ) inv(b) inv(b)表示,那么:
( a / b ) % p = ( a ∗ i n v ( b ) ) % p = ( a % p ∗ i n v ( b ) % p ) % p (a/b)\%p=(a*inv(b))\%p=(a\%p*inv(b)\%p)\%p (a/b)%p=(a∗inv(b))%p=(a%p∗inv(b)%p)%p
下面介绍两种常用的求逆元的方法:
求逆元前提:只有gcd(a,p)=1,才存在a关于p的逆元。
1.扩展欧几里得
时间复杂度:效率较高 常数较小 O ( l n ( p ) ) O(ln(p )) O(ln(p)) ,不要求p为质数
定理:若 a ∗ x ≡ 1 ( m o d b ) a*x\equiv1 \pmod {b} a∗x≡1(modb) ,那么我们就能定义: x x x 为