费马小定理求逆元

费马小定理求逆元

费马小定理定义及证明

image-20201016085335031
  • 为什么每一个\(A_i \times a (mod p)\) 是独一无二的?

对于任意两个\(A_i \times a\)而言, 二者的差值为a的整数倍,而\((a,p)=1\),因此\((A_i,a) \% p\) 一定不会得到相同的余数(同余的两个数的差值一定是mod的整数倍)。

  • \(\forall A_i \times a \% p (i=1,2,...,p-1)\) 所构成的序列是\((1,2,...,p-1)\)的一种排列

因为 \(x \% p \in [0,p-1]\),而已知\(A_i \times a (mod p)\) 是独一无二的,因此\(\forall A_i \times a \% p (i=1,2,...,p-1)\) 所构成的序列是\((1,2,...,p-1)\)的一种排列。

  • 故得证 $\prod_{i=1}^{n} A_i = \prod_{i=1}^n (A_i \times a)(mod \ \ p) $

因此\((a,p) = 1\)\(a^{p-1} = 1 (mod \ \ p)\) \(p为素数,gcd(a,p) = 1\)

费马小定理求逆元

\(a \times b = 1 (mod \ \ p)\)\(a,b\)互为 \(mod \ \ p\)逆元

由费马小定理\(a^{p-1} = 1 (mod \ \ p)\),因此\(a \times a^{p-2} = 1 (mod p)\),因此a的逆元为\(a^{p-2} (mod \ \ p)\)

typedef long long ll;
ll mod = 1e9 + 7;
inline ll quick_pow(ll base,ll idx){
    ll ans = 1;
    while(idx){
        if(idx & 1){
            ans *= base;
            ans %= mod;
        }
        base *= base;
        base %= mod;
        idx >>= 1;
    }
    return ans;
}

inline ll inv(ll a){
    return quick_pow(a,mod-2);
}
posted @ 2020-10-16 09:22  popozyl  阅读(1670)  评论(0编辑  收藏  举报