注意事项
涉及到求快速幂的算法,可以看我之前的文章:java—快速幂
题目:
输入:
4
4 3
8 5
6 3
2 2
输出:
1
2
impossible
impossible
public class 快速幂_求逆元 {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
int m = in.nextInt();
while (m-- > 0) {
long a = in.nextInt();
int p = in.nextInt();
//res保存每次求出的a % p的乘法逆元
//注意要特判一下,如果a % p等于0,那说明是2 2这样的数据,求出逆元必定为1,这就错了,所以要特判一下
long res = qmi(a, p-2, p);
if (a % p != 0) System.out.println(res);
else System.out.println("impossible");
}
}
//这里还是快速幂的求法
public static long qmi(long a, int k, int p) {
long res = 1;
while (k > 0) {
if ((k & 1) == 1) res = res * a % p;
k >>= 1;
a = a * a % p;
}
return res;
}
}
思路解析:(找逆元就是为了不出现除法,因为取余%有除法会很麻烦)
声明:算法思路来源为y总,详细请见https://www.acwing.com/
本文仅用作学习记录和交流