本文共 2408 字,大约阅读时间需要 8 分钟。
1定义
乘法逆元,是指数学领域群G中任意一个元素a,都在G中有唯一的逆元a‘,具有性质a×a'=a'×a=e,其中e为该群的单位元。
定理:a存在模p的乘法逆元的充要条件是gcd(a,p) = 1
证明: 首先证明充分性 如果gcd(a,p) = 1,根据欧拉定理,aφ(p) ≡ 1 mod p,因此 显然aφ(p)-1 mod p是a的模p乘法逆元。 再证明必要性 假设存在a模p的乘法逆元为b
a ≡ 1 mod p 则 1 = ba - q
p根据贝祖定理,这个式子有整数解的充要条件是a和p的最大公约数整除1,故必须要满足gcd(a,p) = 1举个例子,在模10的意义下,3的逆元为7,因为37与1在模10的意义下同余。
2.计算
下面的逆元均指在模运算下的逆元。
2.1费马小定理
根据费马小定理,如果p是质数,有\(a^{p-1}\equiv1(mod p)\),其中a是整数,所以\(a^{p-2}\)为a的逆元,用快速幂即可,注意取模,这个逆元在模p状态下唯一。
代码:
#include #include #include #include #include #include #include #include
2.2 扩展欧几里得算法
根据扩展欧几里得算法,知道\(a*x\equiv1(mod p)\)(其实等价于\(k*p-a*x=1\))有解,那么可以通过扩展欧几里得算法求出。这里不再赘述。
#include #include #include #include #include #include #include #include
2.3递推求逆元
首先,我们用\(a^{-1}\)表示a的逆元,易知\(1^{-1}=1\equiv1(mod p)\),所以1为1的逆元
还有递推公式证明:设
\(q*k+r=p\)则:
\(q*k+r\equiv0(mod p)\)\(k*r^{-1}+q^{-1}\equiv0(mod p)\)\(q^{-1}\equiv{-k*r^{-1}}(mod p)\)\(q^{-1}\equiv{(p-k)*r^{-1}}(mod p)\)由此得出递推公式:inv[i] = (p - p / i) * inv[p % i] % p;(设inv[i]为i的逆元)
代码:
#include #include #include #include #include #include #include #include
转载地址:http://zjdkz.baihongyu.com/