费马小定理
定理
若 \(p\) 是质数,且整数 \(a\) 满足 \(\boldsymbol{a \not\equiv 0 \pmod p}\),则:
\[a^{p-1} \equiv 1 \pmod p
\]
变形
-
\(a^{p-2} \equiv a^{-1} \pmod p\)
-
\(a^b \equiv a^{b \bmod (p-1)} \pmod p\)
前提:p为质数
运用
乘法逆元
在模质数 \(p\) 意义下,除法不能直接算,要乘逆元:
\[\frac{x}{y} \pmod p = x \times y^{-1} \pmod p
\]
由费马:\(y^{-1}=y^{p-2}\pmod p\),用快速幂计算。
适用场景:组合数 \(\mathrm{C}_n^k \bmod p\),p为质数。
快速幂降幂
求 \(a^b \bmod p\),当 \(b\) 极大,p质数,a、p互质:
\[a^b \equiv a^{b \bmod (p-1)} \pmod p
\]
素数测试
随机选若干个a,检验 \(a^{p-1}\equiv1\pmod p\)
满足大概率(存在伪素数)是质数,不满足一定是合数。
模版
typedef long long ll;
ll qpow(ll a,ll b,ll mod){
ll res=1;
while(b){
if(b&1) res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
// 求a在模质数p下逆元
ll inv(ll a,ll p){
return qpow(a,p-2,p);
}
例题
P2613
题目:给出 \(a,b,p\),求 \(\dfrac{a}{b} \bmod 19260817\),\(19260817\)是质数。
式子:
\[\frac{a}{b} \equiv a \times b^{mod-2} \pmod{mod}
\]
片段:
const int mod=19260817;
ll a,b;
cin>>a>>b;
ll ans=a%mod * qpow(b,mod-2,mod)%mod;
P3811
单点求逆元用费马快速幂
但本题n范围大 \(1\le n\le 3\times10^6\),费马快速幂会TLE,要用线性递推逆元。

费马小定理
浙公网安备 33010602011771号