学习笔记:费马小定理

费马小定理

定义

p 是质数,且 gcd(a,p)=1,则有 ap11(modp)

另一个形式:对于任意整数 a,有 apa(modp)

证明

设一个质数为 p,我们取一个不为 p 倍数的数 a

构造一个序列:A={1,2,3,p1},这个序列有着这样一个性质:

i=1n Aii=1n(Ai×a)(modp)

证明:

因为 (Ai,p)=1,(Ai×a,p)=1

又因为每一个 Ai×a(modp) 都是独一无二的,且 Ai×a(modp)<p

得证(每一个 Ai×a 都对应了一个 Ai

f=(p1)!, 则 fa×A1×a×A2×a×A3×Ap1(modp)

ap1×ff(modp)ap11(modp)

证毕。

也可用归纳法证明:

显然 1p1(modp),假设 apa(modp) 成立,那么通过二项式定理有

(a+1)p=ap+(p1)ap1+(p2)ap2++(pp1)a+1

因为 (pk)=p(p1)(pk+1)k! 对于 1kp1 成立,在模 p 意义下 (p1)(p2)(pp1)0(modp),那么 (a+1)pap+1(modp),将 apa(modp) 带入得 (a+1)pa+1(modp) 得证。

证毕。

应用

费马小定理可以用来求逆元。

p 是质数,且 gcd(a,p)=1,则有 ap11(modp)

由乘法逆元定义推导可知 a×inv(a)1ap1(modp),于是有:

inv(a)ap2(modp)

也就是说,要求 a 在模 p 意义下的乘法逆元,只要求 ap2 即可。至于乘方的话可以用快速幂浅浅优化一下。

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);}
posted @   tsqtsqtsq  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示