由于在计算除法时,mod 运算不能直接加在除数被除数后,因此需要将 n / a (mod b )转化为 n * x (mod b ),以便于进行模运算。求 x 的过程就称为求逆元。
对于 a 、b (a 与 b 互素)满足 n / a ≡ n * x (mod b ),则称 x 为 a 模 b 的逆元;
一般有两种求逆元的方式:扩展欧几里得求逆元和欧拉-费马定理求逆元;
1、扩展欧几里得求逆元:
见(欧几里得与扩展欧几里得);
http://www.cnblogs.com/cenariusxz/p/4323872.html
2、欧拉-费马定理求逆元(通过矩阵快速幂实现):
根据欧拉函数 φ(x) 表示小于自变量 x 并与 x 互素的自然数的个数;
根据欧拉定理(基本是用完全剩余系累加推出来的)
a 与 x 互素时:
a φ(x)≡ 1 (mod x)
即 a * a φ(x)-1≡ 1 (mod x)
所以 :
a φ(x)-1 即为 a 模 x 的逆元;
而费马小定理求的则是欧拉函数的特殊情况:
当 x 为素数时,φ(x)= x - 1 ;
因此当 a 与 x 互素且 x 为素数时:
a x - 2 即为 a 模 x 的逆元;
时间: 2024-11-07 13:40:46