//b*x≡1(modp);如果是逆元; //如果 b和p互质,那么有b^(p-1)≡(1mod p); //所以 b*b^(p-2)≡1(mod p); //那么b的逆元就是b^(p-2); //p为质数,可知a的p-2次方为a的逆元; 2.p当不是质数时,则需要用扩展欧几里得求逆元 3.逆元的作用 当 a,b,很大时 求 a/b mod p 的值 而 a/b mod p≠((a mod p)/(b mod p))mod p 因此可以借助逆元转化为乘法,再算,设b的逆元为b−1 则 a/b mod p= a*b^-1 mod p #include <iostream> #include <algorithm> using namespace std; typedef long long LL; int qmi(int a,int k,int p) { LL res=1; while(k) { if(k&1) res=(LL)res*a%p; k>>=1; a=(LL)a*a%p; } return res; } int main() { int n; cin>>n; while(n--) { int a,p; scanf("%d%d",&a,&p); if(a%p==0)printf("impossible");//特判一下;a是p的倍数。余数为0; else printf("%d",qmi(a,p-2,p));a不是p的倍数;则有费马小定理; puts(""); } return 0; }
乘法逆元--模板
最新推荐文章于 2024-07-24 19:35:30 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)