逆元定义
若
a
a
a能被
b
b
b整除,且
b
b
b和
m
m
m互质,则一定存在一个整数
x
x
x,使得
a
/
b
≡
a
∗
x
(
m
o
d
m
)
a/b \equiv a * x \quad (mod \ m)
a/b≡a∗x(mod m),则
x
x
x为
b
b
b在模
m
m
m下的乘法逆元,记作
b
−
1
(
m
o
d
m
)
b^{-1} \quad (mod \ m)
b−1(mod m)
逆元的三条性质
-
b ∗ b − 1 ≡ 1 ( m o d m ) b*b^{-1} \equiv 1 \quad (mod \ m) b∗b−1≡1(mod m)
-
b b b存在乘法逆元的充要条件是 b b b和 m m m互质
-
当 m m m为质数时, b m − 2 b^{m-2} bm−2是 b b b的乘法逆元
性质1证明
因为
a
a
a是
b
b
b的整数倍,所以
a
=
k
b
a=kb
a=kb
a
/
b
≡
a
∗
b
−
1
(
m
o
d
m
)
a/b \equiv a * b^{-1} \quad (mod \ m)
a/b≡a∗b−1(mod m)
a
/
b
∗
b
≡
a
∗
b
−
1
∗
b
(
m
o
d
m
)
a/b*b \equiv a * b^{-1}*b \quad (mod \ m)
a/b∗b≡a∗b−1∗b(mod m)
k
b
≡
k
b
∗
b
−
1
∗
b
(
m
o
d
m
)
kb \equiv kb * b^{-1}*b \quad (mod \ m)
kb≡kb∗b−1∗b(mod m)
又因为b和m互质,可消去b
k
≡
k
∗
b
−
1
∗
b
(
m
o
d
m
)
k \equiv k * b^{-1}*b \quad (mod \ m)
k≡k∗b−1∗b(mod m)
k
∗
(
1
−
b
−
1
∗
b
)
≡
0
(
m
o
d
m
)
k *(1 - b^{-1}*b) \equiv 0 \quad (mod \ m)
k∗(1−b−1∗b)≡0(mod m)
因为
a
a
a是任意数,所以
k
k
k也是任意数,对于任意
k
k
k上式都要满足,所以
b
−
1
∗
b
≡
1
(
m
o
d
m
)
b^{-1}*b \equiv 1 \quad (mod \ m)
b−1∗b≡1(mod m)
性质2证明
当b存在乘法逆元时,根据性质1有
b
−
1
b
≡
1
(
m
o
d
m
)
b^{-1}b \equiv 1 \quad (mod \ m)
b−1b≡1(mod m)
移项得
1
−
b
b
−
1
≡
0
(
m
o
d
m
)
1-bb^{-1} \equiv 0 \quad (mod \ m)
1−bb−1≡0(mod m),即
1
−
b
b
−
1
1-bb^{-1}
1−bb−1可被
m
m
m整除
等价于
m
x
=
1
−
b
b
−
1
mx=1-bb^{-1}
mx=1−bb−1
令
a
=
m
a=m
a=m,
y
=
b
−
1
y=b^{-1}
y=b−1,则有
a
x
=
1
−
b
y
ax=1-by
ax=1−by
移项得
a
x
+
b
y
=
1
ax+by=1
ax+by=1
根据裴蜀定理推论:
a
a
a和
b
b
b互质的充要条件是方程
a
x
+
b
y
=
1
ax+by=1
ax+by=1有整数解
所以a(也就是m)和b互质。
当a和b互质时,同样根据裴蜀定理推论,
a
x
=
1
−
b
y
ax=1-by
ax=1−by有整数解。
令
a
=
m
a=m
a=m,又因为
x
x
x时整数,则
1
−
b
y
1-by
1−by能被
m
m
m整除
即
1
−
b
y
≡
0
(
m
o
d
m
)
1-by \equiv 0 \quad (mod \ m)
1−by≡0(mod m),
b
y
≡
1
(
m
o
d
m
)
by \equiv 1 \quad (mod \ m)
by≡1(mod m)
因此这个整数
y
y
y就是
b
b
b的逆元。
性质3证明
由费马小定理,我们知道当p是质数时,有
a
p
−
1
≡
1
(
m
o
d
p
)
a^{p-1} \equiv 1 \quad (mod \ p )
ap−1≡1(mod p)。
也就是
a
∗
a
p
−
2
≡
1
(
m
o
d
p
)
a*a^{p-2} \equiv 1 \quad (mod \ p )
a∗ap−2≡1(mod p)
根据定义知
a
p
−
2
a^{p-2}
ap−2是
a
a
a的逆元
快速幂求逆元
例如
a
=
2
,
p
=
3
a=2, p=3
a=2,p=3,则
2
3
−
2
=
2
2^{3-2}=2
23−2=2,
2
∗
2
≡
1
(
m
o
d
3
)
2*2 \equiv 1 \quad (mod \ 3 )
2∗2≡1(mod 3),2在mod 3下的逆元是2。
当
a
a
a和
p
p
p互质时,存在乘法逆元,又因为
p
p
p是质数,所以只要
a
a
a是
p
p
p的倍数就输出impossible。
#include <iostream>
using namespace std;
int n, a, p;
int quick_pow(int a, int b, int p) {
int ans = 1;
while(b) {
if (b & 1) ans = (long long) ans * a % p;
b >>= 1;
a = (long long) a * a % p;
}
return ans;
}
int main() {
scanf("%d", &n);
while(n --) {
scanf("%d%d", &a, &p);
if (!(a % p)) printf("impossible\n");
else printf("%d\n", quick_pow(a, p - 2, p));
}
return 0;
}