乘法逆元(费小定理)
乘法逆元
若
a
,
b
a,b
a,b互质,且满足同余方程
a
x
≡
1
(
m
o
d
b
)
ax \equiv 1 \pmod b
ax≡1(modb)
则称
x
x
x为
a
a
a模
b
b
b的乘法逆元,记作
a
−
1
a^{-1}
a−1
费马小定理
若
a
a
a和
p
p
p互质且
p
p
p为质数,则有
a
p
−
1
≡
1
(
m
o
d
p
)
a^{p -1} \equiv 1 \pmod p
ap−1≡1(modp)
证明:
取与
p
p
p互质的序列
A
=
1
,
2
,
3...
,
p
−
1
A = 1,2,3 ... , p - 1
A=1,2,3...,p−1
即证:
∏
i
=
1
p
−
1
a
×
A
i
≡
∏
i
=
1
p
−
1
A
i
(
m
o
d
p
)
\prod ^{p - 1}_{i = 1} a\times A_i \equiv \prod^{p - 1}_{i = 1}A_i \pmod p
i=1∏p−1a×Ai≡i=1∏p−1Ai(modp)
可证得:对于每一个
a
×
A
i
(
m
o
d
p
)
a \times A_i \pmod p
a×Ai(modp)的余数是唯一的
假设: a A i ( m o d p ) a A_i \pmod p aAi(modp) 和 a A j ( m o d p ) a A_j \pmod p aAj(modp)余数都是 r r r
则有
a A i = x p + r aA_i = xp + r aAi=xp+r
a A j = y p + r aA_j = yp + r aAj=yp+r
消去 r r r有 a ( A i − A j ) = p ( x − y ) a(A_i - A_j) = p(x - y) a(Ai−Aj)=p(x−y)
左右一定不等,因为左边不是p的倍数,矛盾
故有
a
×
A
i
(
m
o
d
p
)
a \times A_i \pmod p
a×Ai(modp)的最终结果一定是等于序列
A
A
A的,即可得证
根据费马小定理
若有
a
,
p
a,p
a,p,其中
a
,
p
a,p
a,p互质且
p
p
p为质数,则有
a
p
−
1
≡
1
(
m
o
d
p
)
a^{p - 1} \equiv 1 \pmod p
ap−1≡1(modp)
a
×
a
p
−
2
≡
1
(
m
o
d
p
)
a \times a ^{p - 2} \equiv 1 \pmod p
a×ap−2≡1(modp)
由乘法逆元的定义可知
a
p
−
2
a^{p - 2}
ap−2就是
a
a
a模
p
p
p意义下的乘法逆元
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
ll ksm(ll a,ll b,ll p){
ll res = 1;
while(b){
if(b & 1)res = res * a % p;
a = a * a % p;
b >>= 1;
}
return res;
}
int main(){
ll a,p;cin >> a >> p;
if(a % p){
cout << ksm(a, p - 2, p) << endl;
}
return 0;
}