「学习笔记」费马小定理

费马小定理

概念

  1. 定理
    pp 为质数, aa 为整数且 (a,p)=1(a,p)=1, 有 ap11(modp)a^{p-1}\equiv1\pmod p.

  2. 证明
    构造质数 p 的完全剩余系P={1,2,3,p1}.P=\{1,2,3,\cdots p-1\}.
    同时构造另一完全剩余系A={a,2a,2a,(p1)a}.A=\{a,2a,2a,\cdots (p-1)a\}.
    由完全剩余系的性质,可得1×2×3××(p1)a2a3a(p1)a(modp).1\times2\times3\times\cdots\times(p-1)≡a\cdot2a\cdot3a\cdot\cdots\cdot(p-1)a\pmod p.
    (p1)!(p1)!ap1(modp).(p-1)!≡(p-1)!\cdot a^{p-1}\pmod p.
    pp为质数,可知 p(p1)!+1p\mid(p-1)!+1
    ((p1)!,p)=0.((p-1)!,p)=0.
    同余式两边可同时约去 (p1)!(p-1)! ,得
    ap11(modp).a^{p-1}≡1\pmod p.
    Justified.

应用

求乘法逆元:bbaa 在模 pp 意义下的乘法逆元,可表示为 abap1.ab≡a^{p-1}.
(a,p)=1(a,p)=1 时,同余式两边可同时乘上 1a\frac{1}{a} ,故 bap2.b≡a^{p-2}.
(a,p)1(a,p)\not=1 时,则该同余式无解。

code:

//费马小定理求乘法逆元 
#include<bits/stdc++.h>
using namespace std;

long long n , p;
long long quick_power(long long x , long long y) { 
    long long res=1 , temp=x;

    for (long long i=y; i; temp=temp*temp%p , i>>=1) {
        if (i%2==1) {
            res=res*temp%p;
        }
    }

    return res;
}

const int maxn=1e6+5;
long long inv[maxn];
int main() {
    scanf("%lld %lld" , &n , &p);

    for (int i=1; i<=n; i++) {
        inv[i]=quick_power(i , p-2);
        //printf("%lld\n" , inv[i]);
    }

    return 0;
}

原文链接: https://www.cnblogs.com/i-willbe233/p/13519896.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    「学习笔记」费马小定理

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/367745

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 下午5:57
下一篇 2023年3月2日 下午5:57

相关推荐