费马小定理内容:
如果p是一个质数,而整数a不是p的倍数(a,b互质),则有a^(p-1)≡1(mod p)
逆元补充:
若整数 b,m 互质,并且对于任意的整数 a,如果满足 b|a,则存在一个整数 x,使得 a/b≡a×x(modm),则称 x 为 b 的模 m 乘法逆元,记为 b^-1(modm)。
b 存在乘法逆元的充要条件是 b 与模数 m 互质。当模数 m 为质数时,bm−2 即为 b 的乘法逆元。
通俗的话就是除法中的除数可以用乘以这个除数的倒数来表示(当然不是这么简单(^ V ^)
证明:
由费马定理有:a^(p-1) %p == 1%p
左边乘a除a : (a^(p-2)*a) %p == 1%p
所以 a^(p-2)就相当于a ^-1
前提:所求模P条件下b的逆元中的b要于p互质,也就是gcd(P,b)==1
acwing876.快速幂求逆元
题目描述:
给定n组整数a,p其中p是质数,求a模p的乘法逆元,若不存在输出impossible
1≤n≤105 ,
1≤ai,pi≤2∗109
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
int n,a,p;
int qmi(ll m,ll n)//快速幂求b^p-2
{
ll res=1;
while(n)
{
if(n&1) res=res*m%p;
m=m*m%p;
n>>=1;
}
return res;
}
int main()
{
cin>>n;
while(n--)
{
cin>>a>>p;
if(a%p==0)//因为p是质数所以只需要判断a是不是它的倍数
{
puts("impossible");
}
else
{
int res=qmi(a,p-2);
cout<<res<<endl;
}
}
return 0;
}