C++求模运算的乘法逆元
时间: 2023-10-27 20:07:39 浏览: 179
C实现乘法逆元
5星 · 资源好评率100%
对于正整数a和m,如果存在一个正整数x满足ax ≡ 1 (mod m),那么我们称x为a在模m意义下的乘法逆元。如果不存在这样的x,我们则称a在模m意义下没有乘法逆元。
求模运算的乘法逆元的方法有很多,以下是其中一种方法:
使用扩展欧几里得算法求解a和m的最大公约数gcd(a,m),如果gcd(a,m)>1,说明a在模m意义下没有乘法逆元;
如果gcd(a,m)=1,那么根据扩展欧几里得算法的推论,可以求解出一组整数x和y,使得ax+my=gcd(a,m)=1;
因为ax ≡ 1 (mod m),所以ax ≡ 1 + km,其中k是一个整数;
因此,x ≡ (1 + km)/a (mod m),其中k可以是任意整数,但是为了保证x在模m意义下的值最小,一般取k使得x的值在0~m-1之间。具体地,可以先计算(1 + km)%m,然后再计算 (1 + km)/a mod m。
以上就是求模运算的乘法逆元的基本方法。在实际计算中,可以预处理出所有1~m-1之间的整数在模m意义下的乘法逆元,存储在一个数组中,在需要使用时直接查表就可以了。
阅读全文