快速幂求逆元
求逆元:
\[{解 b x \equiv 1\pmod{p}}
\]
当b和p不互质时,bx一定是p的倍数,模p一定为0(不为1),此方程无解;
当b和p互质,p是质数时,可以由费马小定理得:
\[\begin{gather*}
b^{p - 1} \equiv 1\pmod {p} \\
即b \cdot b^{p - 2} \equiv 1\pmod p \\
故x = b^{p - 2}
\end{gather*}
\]
因此,在\(p\)是质数的前提下且\(p\)和\(b\)互质,\(b\)的逆元\(\pmod m\)就是\(b ^ {b - 2}\)
#include<iostream>
using namespace std;
typedef long long ll;
int n;
ll ksm(int a, int k, int p){
ll ans = 1;
while (k){
if (k & 1) ans = (ll) ans * a % p;
a = (ll) a * a % p;
k >>= 1;
}
return ans % p;
}
int main(void){
cin >> n;
while (n -- ){
int a, p;
cin >> a >> p;
if(a % p == 0) cout << "impossible" << endl;
else cout << ksm(a, p - 2, p) << endl;
}
return 0;
}