费马小定理
定义
若 p p 是质数,且 gcd ( a , p ) = 1 gcd ( a , p ) = 1 ,则有 a p − 1 ≡ 1 ( mod p ) a p − 1 ≡ 1 ( mod p ) 。
另一个形式:对于任意整数 a a ,有 a p ≡ a ( mod p ) a p ≡ a ( mod p ) 。
证明
设一个质数为 p p ,我们取一个不为 p p 倍数的数 a a 。
构造一个序列:A = { 1 , 2 , 3 … , p − 1 } A = { 1 , 2 , 3 … , p − 1 } ,这个序列有着这样一个性质:
n ∏ i = 1 A i ≡ n ∏ i = 1 ( A i × a ) ( mod p ) ∏ i = 1 n A i ≡ ∏ i = 1 n ( A i × a ) ( mod p )
证明:
因为 ( A i , p ) = 1 , ( A i × a , p ) = 1 ( A i , p ) = 1 , ( A i × a , p ) = 1
又因为每一个 A i × a ( mod p ) A i × a ( mod p ) 都是独一无二的,且 A i × a ( mod p ) < p A i × a ( mod p ) < p
得证(每一个 A i × a A i × a 都对应了一个 A i A i )
设 f = ( p − 1 ) ! f = ( p − 1 ) ! , 则 f ≡ a × A 1 × a × A 2 × a × A 3 ⋯ × A p − 1 ( mod p ) f ≡ a × A 1 × a × A 2 × a × A 3 ⋯ × A p − 1 ( mod p )
a p − 1 × f ≡ f ( mod p ) a p − 1 ≡ 1 ( mod p ) a p − 1 × f ≡ f ( mod p ) a p − 1 ≡ 1 ( mod p )
证毕。
也可用归纳法证明:
显然 1 p ≡ 1 ( mod p ) 1 p ≡ 1 ( mod p ) ,假设 a p ≡ a ( mod p ) a p ≡ a ( mod p ) 成立,那么通过二项式定理有
( a + 1 ) p = a p + ( p 1 ) a p − 1 + ( p 2 ) a p − 2 + ⋯ + ( p p − 1 ) a + 1 ( a + 1 ) p = a p + ( p 1 ) a p − 1 + ( p 2 ) a p − 2 + ⋯ + ( p p − 1 ) a + 1
因为 ( p k ) = p ( p − 1 ) ⋯ ( p − k + 1 ) k ! ( p k ) = p ( p − 1 ) ⋯ ( p − k + 1 ) k ! 对于 1 ≤ k ≤ p − 1 1 ≤ k ≤ p − 1 成立,在模 p p 意义下 ( p 1 ) ≡ ( p 2 ) ≡ ⋯ ≡ ( p p − 1 ) ≡ 0 ( mod p ) ( p 1 ) ≡ ( p 2 ) ≡ ⋯ ≡ ( p p − 1 ) ≡ 0 ( mod p ) ,那么 ( a + 1 ) p ≡ a p + 1 ( mod p ) ( a + 1 ) p ≡ a p + 1 ( mod p ) ,将 a p ≡ a ( mod p ) a p ≡ a ( mod p ) 带入得 ( a + 1 ) p ≡ a + 1 ( mod p ) ( a + 1 ) p ≡ a + 1 ( mod p ) 得证。
证毕。
应用
费马小定理可以用来求逆元。
若 p p 是质数,且 gcd ( a , p ) = 1 gcd ( a , p ) = 1 ,则有 a p − 1 ≡ 1 ( mod p ) a p − 1 ≡ 1 ( mod p ) 。
由乘法逆元定义推导可知 a × inv ( a ) ≡ 1 ≡ a p − 1 ( mod p ) a × inv ( a ) ≡ 1 ≡ a p − 1 ( mod p ) ,于是有:
inv ( a ) ≡ a p − 2 ( mod p ) inv ( a ) ≡ a p − 2 ( mod p )
也就是说,要求 a a 在模 p p 意义下的乘法逆元,只要求 a p − 2 a p − 2 即可。至于乘方的话可以用快速幂浅浅优化一下。
int qpow(int a, int b){
int res = 1;
while(b > 0){
if(b & 1){res *= a;res %= p;}
a *= a;a %= p;b >>= 1;
}
return res;
}
int inv(int n, int p){return qpow(n, p - 2);}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!