乘法逆元的定义
对a∈Zm,存在b∈Zm,使得a×b ≡1 (mod m),则称b为a的乘法逆元。
条件
对于乘法逆元:在mod m的操作下(即Zm中),a存在乘法逆元当且仅当a与m互质。不定方程ab+mx=1的任意一组整数解(b,x),b就是a的乘法逆元。具体计算可以使用扩展欧几里德算法(Extended-GCD)。
//****************************** //返回d=gcd(a,b);和对应于等式ax+by=d中的x,y long long extend_gcd(long long a,long long b,long long &x,long long &y) { if(a==0&&b==0) return -1;//无最大公约数 if(b==0){x=1;y=0;return a;} long long d=extend_gcd(b,a%b,y,x); y-=a/b*x; return d; } //*********求逆元素******************* //ax = 1(mod n) long long mod_reverse(long long a,long long n) { long long x,y; long long d=extend_gcd(a,n,x,y); if(d==1) return (x%n+n)%n; else return -1; }
费马小定理求逆元
//要求mod为素数 LL cal(LL x) { LL res=1; int k=mod-2; while(k) { if(k&1) { res*=x; res%=mod; } x*=x; x%=mod; k>>=1; } return res; }
利用欧拉函数
//mod为素数,而且a和m互质 long long inv(long long a,long long mod)//mod为素数 { return pow_m(a,mod-2,mod); }
- 版权声明:本文基于《知识共享署名-相同方式共享 3.0 中国大陆许可协议》发布,转载请遵循本协议
- 文章链接:http://www.carlstedt.cn/archives/951 (转载时请注明本文出处及文章链接)
发表评论
快来吐槽一下吧!